2017-11-29 17 views
0

私はこのコードに問題があります。正しくコンパイルされません。私はこの間違い取得しています:互換性のない型の発現と 'loebsdata2017'(別名 '構造体loebsdata2017') を初期化Qsortとstrcmp

'をloebsdata2017 *'(別名 '構造体 loebsdata2017 *');参照を中止する*

そして私は自分のコードで何を変更するのか分かりません。あなたは、ポインタ宣言で*を忘れてしまったように見える

int sammenlign_hold (const void *p1, const void *p2); 
void opgave_2 (loebsdata2017 *alle_loebsdata2017) { 
    int i = 0; 
    for (i = 0; i < MAX_PERSONER; i++) { 
     qsort (alle_loebsdata2017, 792, sizeof (loebsdata2017), sammenlign_hold); 
     if(strcmp(alle_loebsdata2017[i].nationalitet, "DEN") == 0) 
     { 

      printf("%s \n", alle_loebsdata2017[i].rytternavn); 
     } 
    } 
} 

int sammenlign_hold (const void *p1, const void *p2) { 
    loebsdata2017 resultat1 = (loebsdata2017 *)p1, 
    loebsdata2017 resultat2 = (loebsdata2017 *)p2; 

    return strcmp(resultat1 -> rytterhold, resultat2 -> rytterhold) 
} 
+3

質問の本文に入れる[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)を読んで、[最小限の完全で検証可能な例](http:// stackoverflow。 com/help/mcve)。 *あなたの質問を編集して改善する*。 –

+2

ヒントとして、 '(loebsdata2017 *)p1'を使って、' loebsdata2017'オブジェクトに 'p1'を*ポインタ*としてキャストし、この*ポインタ*を変数' resultat1'に割り当てます。ポインタ。それは正しいようですか? –

+1

あなたの例では、1回のループ反復ごとに1回ではなく、ループの前にデータを1回ソートするだけで十分です。 –

答えて

2

:あなたが質問について、その後(テキストとして)完全な出力をコピーして(変更なし)、それを貼り付けてください、ビルドエラーを依頼する場合

int sammenlign_hold (const void *p1, const void *p2) { 
    loebsdata2017 *resultat1 = (loebsdata2017 *)p1; 
    loebsdata2017 *resultat2 = (loebsdata2017 *)p2; 

    return strcmp(resultat1 -> rytterhold, resultat2 -> rytterhold) 
} 
+0

セミコロン ";"後で loebsdata2017 * resultat1 =(loebsdata2017 *)p1、 の代わりに "、"? –

+0

はい、または 'loebsdata2017 * resultat1 =(loebsdata2017 *)p1、 * resultat2 =(loebsdata2017 *)p2;'(回答を更新しました) –

+0

ありがとうございました。私はアルファベット順に自分のデータをソートしようとしていますが、私はどのように把握できないようです。それはどのように行われるのプロトタイプはありますか? –