2017-11-24 22 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を "再定義"することはできません。それは、その時点から有効になる実行可能なステートメントのようなものではありません。テンプレート、継承、またはその他のさまざまなデザインパターンを使用して、実行しようとしていることの基本的な考え方を達成するさまざまな方法があります。あなたの状況に最も適したものを決定するために、これらのトピックに関するすべてのことを学ぶためにC++の本を読んだりすることをお勧めします。 –

+0

^それで、スイッチの後にスローグで達成したいことを示してください。 –

答えて

0

サムの言いたいことに触れてください:このトピックの詳細については、thisの回答とthisのページをご覧ください。うまくいけば、彼らはあなたが大きな絵を理解するのを助けてくれるでしょう。

あなたの質問に直接答えるには:実行時にスローグをデータ型として定義するのは面倒です。詳細here。あなたが望むものへの迅速な解決がそうのように、あなたのためのさまざまな情報を保持することができます構造体の強打を定義することです

:それは値を返す時が来たら

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

、あなただけのどの値をチェック実際には、my_val_intがデフォルトと異なるかどうか、またはcharが空でないかどうかをチェックすることによって設定されます。

これは非常に速く汚い方法です。プログラムをどのように構造化するかという独自のアイデアを開発するための出発点としてのみ使用してください。 :-)

Goodluck!

+0

ありがとうございます。さまざまなデータ型で関数を機能させる簡単な方法はありますか? –

+0

はい!私はあなたのための迅速な解決策を1秒後に記入します。繰り返しますが、上記のリンクをご覧になることをお勧めします。 – Sipty

関連する問題