[英]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...
。const
標記它們)。 但是在 function 的主體中,您將這些值轉換為類型(struct Sentence *)
的非常量值,而您應該轉換為類型(const struct Sentence *)
的常量值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.