在C++中无法从向量中检索项目的PooTeC索引
在Visual Studio'12中获取以下编译错误在C++中无法从向量中检索项目的PooTeC索引,c++,visual-studio-2010,vector,C++,Visual Studio 2010,Vector,在Visual Studio'12中获取以下编译错误 error C3867: 'std::vector<_Ty>::at': function call missing argument list; use '&std::vector<_Ty>::at' to create a pointer to member line 39 代码 你需要括号,而不是括号。at是一个成员函数 你需要括号,而不是括号。at是一个成员函数。Vector2dVector::at很
error C3867: 'std::vector<_Ty>::at': function call missing argument list; use '&std::vector<_Ty>::at' to create a pointer to member line 39
代码
你需要括号,而不是括号。at是一个成员函数
你需要括号,而不是括号。at是一个成员函数。Vector2dVector::at很可能是一个函数,而不是数组类型的字段:
Vector2d vec2 = mVertices.at(i); //Line 39
Vector2dVector::at很可能是一个函数,而不是数组类型的字段:
Vector2d vec2 = mVertices.at(i); //Line 39
问题是您在此处输入了一个错误:
Vector2d vec2 = mVertices.at[i]; //Line 39
^ ^
您应该使用with std::vector::at方法调用,而不是[]:
另一种方法是使用std::vector::operator[]重载,而不是at:
区别在于std::vector::at对向量索引进行边界检查,如果索引超出范围,则抛出异常std::out_of_range以防止缓冲区溢出
相反,如果使用std::vector::operator[],则边界检查将被禁用
换句话说,使用std::vector::operator[]可以获得更快的代码,但没有对向量索引进行运行时检查,因此必须注意索引,以避免危险的缓冲区溢出
更准确地说,在Visual Studio中,如果设置为1,则std::vector::operator[]也会进行边界检查。问题是您在此处输入了一个拼写错误:
Vector2d vec2 = mVertices.at[i]; //Line 39
^ ^
您应该使用with std::vector::at方法调用,而不是[]:
另一种方法是使用std::vector::operator[]重载,而不是at:
区别在于std::vector::at对向量索引进行边界检查,如果索引超出范围,则抛出异常std::out_of_range以防止缓冲区溢出
相反,如果使用std::vector::operator[],则边界检查将被禁用
换句话说,使用std::vector::operator[]可以获得更快的代码,但没有对向量索引进行运行时检查,因此必须注意索引,以避免危险的缓冲区溢出
更准确地说,在Visual Studio中,如果设置为1,则std::vector::operator[]也会进行边界检查。好的,我同意这是一个愚蠢的问题。我以为Visual Studio 2012的Intelissense会就此警告我。我认为这不是一个愚蠢的问题:我们每个人都曾经是初学者!:享受学习。好吧,我同意这是一个愚蠢的问题。我以为Visual Studio 2012的Intelissense会就此警告我。我认为这不是一个愚蠢的问题:我们每个人都曾经是初学者!:享受学习。
Vector2d vec2 = mVertices.at(i); //Line 39
Vector2d vec2 = mVertices[i];