类std :: vector <object>没有名为&#39; x&#39;的成员

时间:2016-09-04 02:09:37

标签: 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;
}

可能导致麻烦的是什么?

2 个答案:

答案 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();