在一些代碼,我正在寫一個函數,我有以下行,這給了我錯誤C2064:錯誤C2064:術語不計算爲服用0參數
rs_opCodes[cur_block]();
rs_opCodes的定義是這樣的:
typedef void (rsInterpreter::*rs_opCode)();
rs_opCode rs_opCodes[NUM_OPCODES];
有沒有人知道我爲什麼收到錯誤C2064?
在一些代碼,我正在寫一個函數,我有以下行,這給了我錯誤C2064:錯誤C2064:術語不計算爲服用0參數
rs_opCodes[cur_block]();
rs_opCodes的定義是這樣的:
typedef void (rsInterpreter::*rs_opCode)();
rs_opCode rs_opCodes[NUM_OPCODES];
有沒有人知道我爲什麼收到錯誤C2064?
您將rs_opCode
定義爲方法指針,但您將其用作函數指針。
您必須使用方法指針調用的語法,但您需要一個實際調用的對象。需要注意的是typedef的stablishes,你定義指針類型rsInterpreter的對象的方法,所以你需要一個類型的對象:
rsInterpreter r;
(r.*rs_opCodes[cur_block])();
然而,這個整體思路並沒有太大的意義我。你正在編寫一個方法指針數組,以便在對象中調用...我一開始以爲,我不能想到這種類型代碼的可用示例...
您定義了rs_opCode
作爲指向成員函數(類rsInterpreter
)的指針。 要叫這樣一個東西,你需要的語法時才
(object.*rs_opCodes[cur_block])();
或
(pointer->*rs_opCodes[curr_block])();
我計算過,我就不必因爲行是在一個成員函數。我想我錯了。謝謝! – Jarrod 2010-10-29 11:05:55
「我不能,一開始以爲......」 - 我會說'rsInterpreter'是一個虛擬機,'rs_opCodes'是一個程序。而不是操作碼被編碼爲整數,它們被編碼爲成員函數指針。通過調用虛擬機上相應的成員函數來執行操作。這是一個有限的VM模型,因爲在操作碼中沒有立即值的地方,但它可以飛行。 – 2010-10-29 12:20:57
@Steve:謝謝!我只是沒有想到實際解釋變量名:) – 2010-10-29 12:28:24