好的家伙我在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];
答案 0 :(得分:0)
它在我的电脑上编译。似乎获得该错误的方法是使用变量而不是数组。检查属性的名称。
答案 1 :(得分:0)
根据直觉和评论提示,你有一个局部变量best_p
(看起来是unsigned int
),它会影响你班级的成员。因此,best_p[side_pos]
将使用局部变量,而不是数据成员。
如果您希望编译器捕获阴影,-Wshadow
选项应该执行此操作。它做的最好的事情就是重命名。拥有数据成员名称的约定(m_<name>
是常见的)也可以帮助防止意外阴影和考虑重命名的内容。