将std :: vector传递给函数

use*_*858 0 c++

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

 A nonstatic member reference mus be relative to a specific object.
Run Code Online (Sandbox Code Playgroud)

在我的标题中:

#ifndef HEADER_H
#define HEADER_H
#include <vector>

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

    };

}
#endif
Run Code Online (Sandbox Code Playgroud)

.cpp文件:

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

Main.cpp的

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

And*_*owl 10

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

Functions::MyClass m;
m.fun(vect);
Run Code Online (Sandbox Code Playgroud)

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

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

void fun(std::vector<char*>& vect)
//                         ^
Run Code Online (Sandbox Code Playgroud)

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

另外,一个好主意是使用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");
}
Run Code Online (Sandbox Code Playgroud)