C++ C++;使用短字符串索引整数数组

C++ C++;使用短字符串索引整数数组,c++,arrays,indexing,int,short,C++,Arrays,Indexing,Int,Short,好了,伙计们,我15分钟前问了一个问题,然后结束了它,因为当我在main()中尝试一个简单的测试时,它成功了。但是,它在实际代码中不起作用: 在后台,我有一个无符号整数数组,无法通过无符号短索引器访问该数组。如果我在堆栈上声明一个数组,它可以工作,但对我的数组数据成员不起作用 以下是数组声明: typedef unsigned int uint; class OB{ public: OB(); void x(unsigned short side_pos); private:

好了,伙计们,我15分钟前问了一个问题,然后结束了它,因为当我在
main()
中尝试一个简单的测试时,它成功了。但是,它在实际代码中不起作用:

在后台,我有一个无符号整数数组,无法通过无符号短索引器访问该数组。如果我在堆栈上声明一个数组,它可以工作,但对我的数组数据成员不起作用

以下是数组声明:

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];

它在我的电脑上编译。似乎获得该错误的方法是使用变量而不是数组。检查属性的名称

根据直觉和注释提示,您有一个局部变量
best\p
(从外观上看是一个
无符号int
),它隐藏着您的类成员。因此,
best\u p[side\u pos]
将使用局部变量,而不是数据成员


如果希望编译器捕捉阴影,则应使用
-Wshadow
选项。当它这样做时,最好的做法是重命名某个对象。对数据成员名有一个约定(
m
是一个常见的约定)也有助于防止意外跟踪和思考重命名对象。

你确定这是唯一的
best_p
,并且没有局部变量吗?@chris这样回答(你说得有点对,在我的一个编译器错误中,我确实有一个多重声明,但在另一个错误中,我没有,并将“this->my_array[]”修复了它)。更好:使用不同的名称。阴影有时很有用,但通常只会导致编译错误。@user997112我在上一篇文章中已经说过,您总是尝试编译自己的代码段。有这么难吗?!您的代码段编译成功了。