【发布时间】:2014-09-17 04:24:45
【问题描述】:
我正在开发一个使用 OpenCV 2.4.9 和 NDKr9 作为依赖项的 Android 应用程序。我也使用 Eclipse 4.4 Luna 作为 IDE,安装了 CDT 插件 8.4。
每当我尝试使用方法 std::vector.at(int) 或“[]”方法时,我都会遇到奇怪的错误。例如,考虑以下代码:
#include <vector>
.........................
struct CustomStruct {
int level;
Point firstPoint, secondPoint, middlePoint;
};
.........................
int maxElemNr = 10;
std::vector<CustomStruct > customStructVector(maxElemNr);
.........................
for(int i=0;i<customStructVector.size();i++){
if(customStructVector.at(i).level == 0){
}
}
在customStructVector.at(i) Eclipse 告诉我以下内容:
Invalid arguments ' 候选者是:ResultWithEvidence & at(?) const ResultWithEvidence & at(?)'
如果我想使用“[]”运算符,而不是“at(index)”方法,我会得到以下信息:
resultWithEvidenceVector[i].level 告诉我找不到字段 level。
我绝不是 C/C++ 编码专家,而且我在使用 NDK 方面还比较陌生。来自 Java 背景,我希望在调用customStructVector.at(i) 或customStructVector[i] 时获得CustomStruct 类型的对象,这样我就可以简单地访问我的对象上的字段level 来读取它的值。
另外,将我的向量声明为
int maxElemNr = 10;
std::vector<CustomStruct> customStructVector;
customStructVector.reserve(maxElemNr);
我明白了:
Invalid arguments ' 候选者是:void reserve(?) '
我已经搜索了答案,并提出了 eclipse 可能不使用 c++11 版本的 std 库的理论?
我从here 阅读了有关矢量类的信息。此外,此问题与here 提出的问题非常相似。
如果需要,将提供有关我的环境等的更多信息。想解决这个问题,因为到目前为止它对我的项目来说是一个相当大的障碍..
我做错了什么?在使用 std::vector 类之前,我在编译和运行代码时没有问题。
LE: 显然解决方法&(resultWithEvidenceVector.data()+i)->level 被编辑器识别,并且代码编译。仍然想使用std::vector,因为它应该被使用。
【问题讨论】:
-
Eclipse 就是这么好。我从编辑器中得到不存在的错误。我通常会发现使用简单的模板就可以了,所以你的情况似乎有点极端,但我确实发现它给了我根本不存在的错误。进行编译以找出问题的真相,然后忽略或关闭 eclipse 错误(不理想)。
-
我最终使用了经典的 c 样式数组...谢谢您的帮助!虽然我已经绕过了这个问题,但如果有人知道它的答案,请发布它。也许其他人会有同样的问题,可能会找到你的答案。谢谢
标签: eclipse c++11 android-ndk stdvector eclipse-cdt