我有一个名为 Grid.h 的类头文件,其中包含以下 2 个私有(private)数据对象:
vector<int> column;
vector<vector<int>> row;
还有一个公共(public)方法,它在 Grid.h 中的原型(prototype)是这样的:
int getElement (unsigned int& col, unsigned int& row);
上述函数的定义在Grid.cpp中是这样定义的:
int getElement (unsigned int& col, unsigned int& row)
{
return row[row][col] ;
}
当我运行该程序时,出现此错误:
error C2109: subscript requires array or pointer type
出了什么问题?
最佳答案
在 return row[row][col];
行中,第一个 row
是 int&
,而不是 vector
.
在内部作用域中声明的变量覆盖了外部作用域中的变量,因此编译器试图索引 int
而不是 vector
,这显然做不到。
您应该修复您的变量名称,以免它们发生冲突。
编辑:此外,虽然您得到的错误表明编译器找到了错误的 row
变量,正如 A. Levy 指出的那样,您也有vector
的声明存在问题,因此即使您修复了变量名称,如果您确实已按照此处所示声明了 vector
,它也不会编译。嵌套模板在 >
符号之间需要空格,否则编译器会将 >>
读取为右移运算符,而不是模板声明的一部分。必须是
std::vector<std::vector<int> > row;
或
std::vector< std::vector<int> > row;
此外,当您在头文件中执行此操作时,您将需要将 std::
标记添加到 std 命名空间的任何内容的前面 - 例如 vector
。如果它在 cpp 文件中,那么您可以使用 using namespace std;
但在头文件中这样做会非常糟糕(因为它会污染全局命名空间)。如果没有 std::
标记或 using
语句,编译器将无法识别 vector
。
关于 vector 的 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717533/