当我尝试编译类似于以下内容的东西时,我收到标题中提到的错误消息。
class Object{
public:
Object(){
//Something
}
void x(){
//Something
}
}
void function(std::vector<Object>* things){
int someNumber;
//Some algorithm to get the value of someNumber.
things->resize(someNumber);
for(int i=0;i<someNumber;i++){
things[i].x();
}
}
int main(){
vector<Object> things;
function(&things);
return 0;
}
可能导致麻烦的是什么?
答案 0 :(得分:5)
您正在将指针传递给向量,因此当您使用[]
时,它会将things
视为数组的向量。
void function(std::vector<Object>* things)
{
things[0]; // element of array of vectors (vector<Object>)
}
尝试通过引用传递矢量:
void function(std::vector<Object>& things)
{
things[0]; // element of passed in vector (Object)
}
在C++
中,当您在指针上使用[]
时,它假定您正在访问数组,其开头由指针指示。< / p>
所以在你的情况下假设你有一个数组的向量,而[]
正在从该数组中选择一个向量。
您希望使用[]
来访问向量的元素,因此您需要按照指示传递引用,或者在使用[]
之前取消引用指针:
vector<Object>* things;
(*things)[0]; // dereference the pointer then access the elements
答案 1 :(得分:1)
void function(std::vector<Object>* things){
int someNumber;
//Some algorithm to get the value of someNumber.
things->resize(someNumber);
for(int i=0;i<someNumber;i++){
things[i].x();
}
}
things
是一个指针。对于指针things[i]
等于*(things+i)
所以这不是您尝试做的,您需要:
(*things)[i].x();
或更详细:
things->operator[]( i ).x();