将std::vector传递给函数 我想在C++代码中添加一些值给向量,但是每次我尝试把向量发送到我的MIN .CPP文件中的函数时,它会把它画成红色,并说: A nonstatic member reference mus be relative to a specific object.

将std::vector传递给函数 我想在C++代码中添加一些值给向量,但是每次我尝试把向量发送到我的MIN .CPP文件中的函数时,它会把它画成红色,并说: A nonstatic member reference mus be relative to a specific object.,c++,C++,在我的标题中: #ifndef HEADER_H #define HEADER_H #include <vector> namespace Functions{ class MyClass { public: void fun(std::vector<char*> vect); }; } #endif #ifndef头 #定义标题 #包括 命名空间函数{ 类MyClass { 公众: void-fun(std::ve

在我的标题中:

#ifndef HEADER_H
#define HEADER_H
#include <vector>

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

    };

}
#endif
#ifndef头
#定义标题
#包括
命名空间函数{
类MyClass
{
公众:
void-fun(std::vector-vect);
};
}
#恩迪夫
.cpp文件:

void Functions::MyClass::fun(std::vector<char*> vect){
    vect.push_back("value 1");
    vect.push_back("Save File Name");
}
void函数::MyClass::fun(std::vector vect){
向量推回(“值1”);
向量推回(“保存文件名”);
}
Main.cpp

#include "Header.h"    
#include <vector>
int main(){ 
  std::vector<char*>vect;
  Functions::MyClass::fun(vect);
  return 0;
}
#包括“Header.h”
#包括
int main(){
std::vectorvect;
函数::MyClass::fun(vect);
返回0;
}

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

Functions::MyClass m;
m.fun(vect);
如果您的函数不需要处理它所属类的任何具体实例,则可以将其声明为
static
。这将允许您以当前的方式调用它

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

你有两个问题:

  • 您正在调用一个没有对象的非静态函数。要修复声明MyClass类型的对象并对其调用
    fun
    ,请执行以下操作:

    int main(){ 
      Functions::MyClass a;
      std::vector<char*>vect;
      a.fun(vect);
      return 0;
    }
    

  • 当然,声明也应该相应地更改。

    您可能希望通过引用传递该向量。创建一个类的对象并将该向量作为引用传递给它。如果选择我,我将接受此答案。在<>代码> STD::String ,我没有注意到<代码> Char *的用法。OP:请考虑接受Andy Prowl的答案而不是我的答案,因为它更详细,也提出了另一个重要的改进。
    #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");
    }
    
    int main(){ 
      Functions::MyClass a;
      std::vector<char*>vect;
      a.fun(vect);
      return 0;
    }
    
    void Functions::MyClass::fun(std::vector<char*>& vect){
      vect.push_back("value 1");
      vect.push_back("Save File Name");
    }