2014-02-26 32 views
0

好吧,我在15分鐘前提出了一個問題並關閉了它,因爲當我在main()中嘗試了一個簡單的測試時,它工作正常。但是,它在實際代碼中不起作用:C++使用短索引整數整數數組

背景,我有一個無符號整數的數組,我無法通過無符號短索引器訪問。如果我在棧上聲明瞭一個數組,它可以工作,但它不適用於我的數組數據成員。

這裏是數組聲明:

typedef unsigned int uint; 

class OB{ 
public: 
    OB(); 
    void x(unsigned short side_pos); 

private: 
    uint best_p[2]; 
}; 

這裏的地方我得到的編譯器錯誤代碼:

void OB::x(unsigned short side_pos){ 
    unsigned int best_price = best_p[side_pos]; 
} 

如果我做的:

void OB::x(unsigned short side_pos){ 
    unsigned short something_else = 1; 
    unsigned int best_price = best_p[something_else]; 
} 

我也得到了編譯器錯誤,即:

OB.cpp: In member function ‘void OB::x(short unsigned int)’: 
OB.cpp:62:56: error: invalid types ‘unsigned int[short unsigned int]’ for array subscript 
    unsigned int best_price = best_p[side_pos]; 
+1

你確定這是* only *'best_p'並且沒有,比如一個局部變量嗎? – chris

+0

@chris把這作爲答案(你是對的,在我的編譯器錯誤之一,我確實有一個多重聲明,但另一個我沒有,並把「this-> my_array []」固定它)。 – user997112

+1

更好:使用不同的名稱。有時候,陰影可能很有用,但通常它會導致編譯錯誤。 –

回答

0

基於直覺和評論暗示,你有一個局部變量best_p(一unsigned int由它的外觀)這是你的陰影類的成員。因此,best_p[side_pos]將使用本地變量,而不是數據成員。

如果您希望編譯器捕捉陰影,-Wshadow選項應該這樣做。當它做的最好的事情是重命名一些東西。有一個數據成員名稱(m_<name>是一個常見的約定)也可以幫助防止意外隱藏和思考什麼重命名的東西。

0

它編譯在我的電腦上。似乎獲得該錯誤的方法是使用變量而不是數組。檢查您的屬性的名稱。