将std :: vector传递给函数

时间:2013-06-11 16:54:33

标签: c++

我想在我的c ++代码中为向量添加一些值,但每次我尝试将向量发送到main.cpp文件中的函数时,它都用红色加下来并说:

 A nonstatic member reference mus be relative to a specific object.

在我的标题中:

#ifndef HEADER_H
#define HEADER_H
#include <vector>

namespace Functions{
    class MyClass
    {
    public:
        void fun(std::vector<char*> vect);

    };

}
#endif

.cpp文件:

void Functions::MyClass::fun(std::vector<char*> vect){
    vect.push_back("value 1");
    vect.push_back("Save File Name");
}

Main.cpp的

#include "Header.h"    
#include <vector>
int main(){ 
  std::vector<char*>vect;
  Functions::MyClass::fun(vect);
  return 0;
}

2 个答案:

答案 0 :(得分:10)

您正在调用fun()成员函数,就像它是静态函数一样。因为它是一个常规的成员函数,所以你应该创建一个可以调用它的对象:

Functions::MyClass m;
m.fun(vect);

如果您的函数不需要处理它所属的类的任何具体实例,则可以将其声明为static。这样你就可以按照当前的方式调用它。

此外,正如其他人已经指出的那样,通过引用传递可能是一个好主意:

void fun(std::vector<char*>& vect)
//                         ^

按值传递将在vect中创建参数的副本,这意味着在调用fun()后调用函数不会看到任何副作用。< / p>

另外,最好使用std::string而不是指向char的指针(特别是如果不是const):

#include <string> // Requires for std::string

// ...

void Functions::MyClass::fun(std::vector<std::string>& vect)
//                                       ^^^^^^^^^^^
{
    vect.push_back("value 1");
    vect.push_back("Save File Name");
}

答案 1 :(得分:4)

你有两个问题:

  1. 您正在调用没有对象的非静态函数。要修复它,请声明一个MyClass类型的对象并在其上调用fun

    int main(){ 
      Functions::MyClass a;
      std::vector<char*>vect;
      a.fun(vect);
      return 0;
    }
    
  2. 您只能在函数中修改vect的本地副本。要修复它通过引用函数传递向量:

    void Functions::MyClass::fun(std::vector<char*>& vect){
      vect.push_back("value 1");
      vect.push_back("Save File Name");
    }
    
  3. 当然,声明也应该相应改变。