亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

error C2664: 請問該怎么解決?

error C2664: 請問該怎么解決?

C++
慕田峪9158850 2022-11-16 15:15:56
我定義了一個類A,在里面定義了cmp函數然后從A派生了一個子類B,在里面進行排序,并調用cmp然后就顯示如下錯誤,error C2664: 'qsort' : cannot convert parameter 4 from 'int (const void *,const void *)' to 'int (__cdecl *)(const void *,const void *)'。ps:我單獨把他們倆放在一個cpp的主函數中運行時沒有這個問題如果回答的好我加財富再采納~
查看完整描述

2 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

__cdecl 是C Declaration的縮寫(declaration,聲明),表示C語言默認的函數調用方法:所有參數從右到左依次入棧,這些參數由調用者清除,稱為手動清棧。被調用函數不會要求調用者傳遞多少參數,調用者傳遞過多或者過少的參數,甚至完全不同的參數都不會產生編譯階段的錯誤。

_stdcall 是StandardCall的縮寫,是C++的標準調用方式:所有參數從右到左依次入棧,如果是調用類成員的話,最后一個入棧的是this指針。這些堆棧中的參數由被調用的函數在返回后清除,使用的指令是 retnX,X表示參數占用的字節數,CPU在ret之后自動彈出X個字節的堆??臻g。稱為自動清棧。函數在編譯的時候就必須確定參數個數,并且調用者必須嚴格的控制參數的生成,不能多,不能少,否則返回后會出錯。

第四個參數的調用方式不一樣,你修改一下就行了

查看完整回答
反對 回復 2022-11-22
?
MM們

TA貢獻1886條經驗 獲得超2個贊

你看一下錯誤提示:
cannot convert parameter 4 from 'int (const void *,const void *)' to 'int (__cdecl *)(const void *,const void *)'。
意思是:不能把int (const void *,const void *)這個類型,自動轉化為int (__cdecl *)(const void *,const void *)
所以你可以手動轉化:直接在你調用自己寫的cmp函數之前加一個(__cdecl *)這樣的類型轉換,試試

查看完整回答
反對 回復 2022-11-22
  • 2 回答
  • 0 關注
  • 238 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號