Как использовать typedef в функции?
Я кодирую Quicksort для сортировки двоичных файлов, которые содержат различные типы данных (структуры). Это то, что я написал до сих пор:
void quicksort(){
int izbor;
char naziv_datoteke[20];
cout << "Izaberite datoteku koju zelite sortirati: "<<endl;
cout << "1 - sifra.ind "<<endl;
cout << "2 - ime.ind "<<endl;
cout << "3 - prezime.ind "<<endl;
cin >>izbor;
switch(izbor){
case 1:strcpy(naziv_datoteke, "sifra.ind");
typedef tsifra slog;
break;
case 2:strcpy(naziv_datoteke, "ime.ind");
typedef time slog;
break;
case 3:strcpy(naziv_datoteke, "prezime.ind");
typedef tprezime slog;
break;
}
int broj_zapisa;
dat.open(naziv_datoteke, ios::in|ios::out|ios::binary);
dat.seekg(0, ios::end);
broj_zapisa=dat.tellg()/sizeof(slog);
// quicksort(0, broj_zapisa-1);
dat.close();
}
Я получаю эту ошибку:
конфликтующее объявление 'typedef struct time slog'
Я хотел бы определить slog как тип данных, который хранится в файле, чтобы я мог использовать его позже для получения размера этой структуры и нескольких других вещей.
1 ответ
Касаясь того, что упомянул Сэм: просмотрите этот ответ и эту страницу для получения дополнительной информации по этой теме. Надеюсь, они помогут вам понять общую картину.
Чтобы ответить на ваш вопрос напрямую: определение slog как типа данных во время выполнения будет просто беспорядочным. Подробнее здесь.
Быстрое решение для того, что вы хотите, - это определить структурный слог, который может содержать различную информацию для вас, например, так:
struct slog()
{
int my_val_int = -1;
char* my_val_char = "";
}
Как только пришло время вернуть значение, вы просто проверяете, какое значение фактически установлено, проверяя, отличается ли my_val_int от вашего значения по умолчанию или char не пустой.
Имейте в виду, это очень быстрый и грязный способ сделать это. Пожалуйста, используйте его только в качестве отправной точки для разработки собственного представления о том, как структурировать программу, чтобы она работала скудно и подло!:-)
Удачи!