簡體   English   中英

如何為句子和文本結構編寫 qsort() 比較器?

[英]How to write qsort() comparator for sentence and text structs?

假設我有一個struct Sentence和一個struct Text 如何在capital_letters_quant上實現 qsort ? 您如何寫出相同的比較 function?

struct Sentence {
    wchar_t* sentence_text;
    size_t sentence_size;   
    bool is_sentence_anagram;
    int64_t capital_letters_quant;
};

struct Text {
    struct Sentence* full_text;
    size_t full_text_size;
};

因此,我嘗試將比較 function 的 arguments 更改為 struct Sentence *,但是編譯器給出了警告或錯誤,老實說,我不想接收它們...

這是我的嘗試

int second_compare(const void* first_current_sentence, const void* second_current_sentence) {
    return ((struct Sentence*)second_current_sentence -> capital_letters_quant) - ((struct Sentence*)first_current_sentence -> capital_letters_quant);
}

但是 gcc 給我這個

錯誤:“second_compare”的類型沖突; 有'int(const void *,const void *)'

注意:先前聲明的 'second_compare' 類型為 'int(struct Sentence *, struct Sentence *)'

警告:取消引用“void *”指針

錯誤:在非結構或聯合的情況下請求成員“capital_letters_quant”

錯誤:在非結構或聯合的情況下請求成員“capital_letters_quant”

  • 首先,您應該將second_compare的聲明更改為int second_compare (const void *, const void *); 因為 arguments 在聲明和定義中的類型必須相同。
  • 其次, ->運算符相對於強制轉換運算符(struct Sentence *)具有更高的優先級,這意味着編譯器首先嘗試訪問 void 指針指向的結構中的字段capital_letters_quant ,因此它會嘗試取消引用它。 要解決此問題,您應該首先轉換,然后取消引用: ... ((struct Sentence *) data) -> field...
  • 第三,您的 function 采用兩個指針,引用常量值(只要您用const標記它們)。 但是在 function 的主體中,您將這些值轉換為類型(struct Sentence *)的非常量值,而您應該轉換為類型(const struct Sentence *)的常量值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM