首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pointIndex无法从c++中的向量中检索项

pointIndex无法从c++中的向量中检索项
EN

Stack Overflow用户
提问于 2013-04-11 09:28:00
回答 3查看 113关注 0票数 1

在Visual '12中获取以下编译错误

代码语言:javascript
复制
error C3867: 'std::vector<_Ty>::at': function call missing argument list; use '&std::vector<_Ty>::at' to create a pointer to member line 39

代码语言:javascript
复制
Vector2dVector mVertices;

/// other code

for (int pointIndex = 0; pointIndex < points.size(); pointIndex++) {
    mVertices.push_back(Vector2d(pointIndex * 2.0f, pointIndex * 3.0f ));
}

int size = mVertices.size();
CCPoint *pointArr = new CCPoint[size];
for(int i = 0; i < size; i++) {
    Vector2d vec2 = mVertices.at[i];  //Line 39 
    //pointArr[i].x = vec2->GetX();
    //pointArr[i].y = vec2->GetY();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-11 09:41:48

问题是这里有一个错误:

代码语言:javascript
复制
Vector2d vec2 = mVertices.at[i];  //Line 39 
                            ^ ^

应该将()std::vector::at方法调用一起使用,而不是[]

代码语言:javascript
复制
Vector2d vec2 = mVertices.at(i);  //Line 39 

另一种选择可以是使用std::vector::operator[]重载(而不是at()):

代码语言:javascript
复制
Vector2d vec2 = mVertices[i];

区别在于std::vector::at()对向量索引执行边界检查,并在索引超出范围时抛出异常std::out_of_range (防止缓冲区溢出)。

相反,如果使用std::vector::operator[],则禁用边界检查。

换句话说,使用std::vector::operator[]可以获得更快的代码,但没有对向量索引进行运行时检查(因此必须注意索引,以避免缓冲区溢出)。

(更准确地说,在Visual中,如果_SECURE_SCL设置为1,也会对std::vector::operator[]进行边界检查)。

票数 2
EN

Stack Overflow用户

发布于 2013-04-11 09:29:59

代码语言:javascript
复制
Vector2d vec2 = mVertices.at(i);
                         // ^ ^

你需要括号,而不是括号。at是一个成员函数。

票数 2
EN

Stack Overflow用户

发布于 2013-04-11 09:30:09

Vector2dVector::at很可能是一个函数,而不是一个类型数组的字段:

代码语言:javascript
复制
    Vector2d vec2 = mVertices.at(i);  //Line 39 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15945236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档