2017-11-24 6 views
0

다른 데이터 형식 (구조체)이 포함 된 이진 파일을 정렬하려면 Quicksort를 코딩하고 있습니다. 나는이 오류를 얻고있다함수에서 typedef를 사용하는 방법은 무엇입니까?

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(); 
} 

:

conflicting declaration 'typedef struct time slog'

내가 데이터 파일에 저장되는 형식 그래서 얻기 위해 나중에 사용할 수 있습니다로 강타를 정의하고 싶습니다 이것은 내가 지금까지 쓴 것입니다 그 구조체의 크기와 다른 것들은 거의 없다.

+7

이렇게하면 C++이 작동하지 않습니다. 'typedef'는 범위에서 시작하여 그 범위를 끝낼 때까지 지속되는 별칭을 정의합니다. typedef를 "재정의 (redefine)"하지 않고, 그 시점에서 유효하게되는 실행 가능한 명령문의 일종이 아닙니다. 템플릿, 상속 또는 다양한 다른 디자인 패턴을 사용하여 수행하려는 작업의 기본 아이디어를 완성하는 데는 여러 가지 방법이 있습니다. 나는 당신이이 주제에 관한 모든 것을 배우기 위해 당신의 C++ 책을 계속 읽으면서 자신의 상황에 가장 적합한 책을 결정할 것을 제안한다. –

+0

^그걸로, '스위치'후에 '슬로우'로 달성하고자하는 것을 보여주십시오. –

답변

0

샘이 언급 한 것에 만지기 :이 주제에 대한 자세한 내용은 this 답변과 this 페이지를 참조하십시오. 다행히도 그들은 당신이 더 큰 그림을 이해하도록 도와줍니다.

직접 질문에 답변하기 : 런타임에 데이터 유형으로 슬로그를 정의하는 것은 지저분 할 것입니다. 더 자세한 내용 here.

당신이, 당신을 위해 다른 정보를 보유과 같이 할 수있는 구조체 강타 정의하는 것입니다 원하는에 대한 빠른 해결책 :

struct slog() 
{ 
    int my_val_int = -1; 
    char* my_val_char = ""; 
} 

를이 값을 반환하는 시간 일단을, 당신은 단지 어떤 값을 확인 실제로 my_val_int가 기본값과 다른지 또는 char가 비어 있지 않은지 확인하여 설정됩니다.

당신이 걱정하는 것은 매우 빠르고 더러운 방법입니다. 프로그램을 구조화하는 방법에 대한 자신 만의 아이디어를 개발하기위한 시작점으로 만 사용하십시오. 그래서 그것은 가늘고 뜻밖의 방식으로 작동합니다! :-)

Goodluck!

+0

고맙습니다. 다른 데이터 유형으로 함수를 작동시키는 더 간단한 방법이 있습니까? –

+0

예! 나는 잠시 후에 그 대답에서 당신을 위해 빠른 해결책을 적어 둘 것이다. 다시 말하지만, 위에서 언급 한 링크를 살펴 보시기 바랍니다. – Sipty

관련 문제