2012-02-11 80 views
3
AIBase* allai[2]; 
AIBase *z0AI = new AIA; 
    AIBase *z1AI = new AIB; 
allai[0] = z0AI;//this this gives me an error 
allai[1]= z1AI; 

AIBase是超和AIA和AIB從AIBase 什麼是錯的語法,我需要搞清楚了這一點 錯誤1一些幫助繼承:基本指針類的數組,C++

錯誤C4430:缺少類型說明符 - 假定爲int。注意:C++不支持默認int 錯誤C2466:不能分配恆定大小0 錯誤C2040的數組: 'allai': 'INT []' 的不同之處從 'AIBase * [2]'

間接水平

爲什麼這個代碼必須在函數範圍內?將這項工作放在全球範圍內?

+7

請不要讓我們猜。顯示錯誤消息(這很重要)。 – 2012-02-11 07:58:08

+1

這段代碼沒有問題。 http://ideone.com/UEC0k – Kos 2012-02-11 08:01:14

+0

你把它寫在函數範圍內嗎? – arrowd 2012-02-11 08:12:17

回答

4

在C++(和C)中,不是變量初始化程序的可執行代碼必須在函數內出現。可執行代碼不能出現在文件作用域(即任何函數之外)。

所以,只要把你的代碼在函數內部:

int main(int, char *[]) 
{ 
    AIBase* allai[2]; 
    AIBase *z0AI = new AIA; 
    AIBase *z1AI = new AIB; 
    allai[0] = z0AI; 
    allai[1]= z1AI; 
} 
+0

這是正確的。然而,爲了迂迴,它只是最後兩行需要在函數內部;前三個可以出現在文件範圍。 (並不是建議...) – 2012-02-11 08:35:07