2010-10-29 38 views
1

在一些代碼,我正在寫一個函數,我有以下行,這給了我錯誤C2064:錯誤C2064:術語不計算爲服用0參數

rs_opCodes[cur_block](); 

rs_opCodes的定義是這樣的:

typedef void (rsInterpreter::*rs_opCode)(); 
rs_opCode rs_opCodes[NUM_OPCODES]; 

有沒有人知道我爲什麼收到錯誤C2064?

回答

0

您將rs_opCode定義爲方法指針,但您將其用作函數指針。

4

您必須使用方法指針調用的語法,但您需要一個實際調用的對象。需要注意的是typedef的stablishes,你定義指針類型rsInterpreter的對象的方法,所以你需要一個類型的對象:

rsInterpreter r; 
(r.*rs_opCodes[cur_block])(); 

然而,這個整體思路並沒有太大的意義我。你正在編寫一個方法指針數組,以便在對象中調用...我一開始以爲,我不能想到這種類型代碼的可用示例...

+0

我計算過,我就不必因爲行是在一個成員函數。我想我錯了。謝謝! – Jarrod 2010-10-29 11:05:55

+0

「我不能,一開始以爲......」 - 我會說'rsInterpreter'是一個虛擬機,'rs_opCodes'是一個程序。而不是操作碼被編碼爲整數,它們被編碼爲成員函數指針。通過調用虛擬機上相應的成員函數來執行操作。這是一個有限的VM模型,因爲在操作碼中沒有立即值的地方,但它可以飛行。 – 2010-10-29 12:20:57

+0

@Steve:謝謝!我只是沒有想到實際解釋變量名:) – 2010-10-29 12:28:24

2

您定義了rs_opCode作爲指向成員函數(類rsInterpreter)的指針。 要叫這樣一個東西,你需要的語法時才

(object.*rs_opCodes[cur_block])(); 

(pointer->*rs_opCodes[curr_block])(); 
相關問題