类std :: vector <Object>没有名为'x'的成员

Let*_*ren -4 c++ vector

当我尝试编译类似于以下内容的东西时,我收到标题中提到的错误消息.

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;
}
Run Code Online (Sandbox Code Playgroud)

什么可能导致麻烦?

Gal*_*lik 5

您正在向您的向量传递指针,因此当您使用[]它时,things就像处理向量数组一样.

void function(std::vector<Object>* things)
{
    things[0]; // element of array of vectors (vector<Object>)
}
Run Code Online (Sandbox Code Playgroud)

尝试通过引用传递矢量:

void function(std::vector<Object>& things)
{
    things[0]; // element of passed in vector (Object)
}
Run Code Online (Sandbox Code Playgroud)

C++当你使用[]一个指针它假设您正在访问的阵列,其开始由指针指示.

所以在你的情况下,假设你有一个向量数组,并[]从该数组中选择一个向量.

您希望用来[]访问向量的元素,因此您需要按指示传入向量,或者在使用之前取消引用指针[]:

vector<Object>* things;

(*things)[0]; // dereference the pointer then access the elements
Run Code Online (Sandbox Code Playgroud)