我想在我的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;
}
答案 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)
你有两个问题:
您正在调用没有对象的非静态函数。要修复它,请声明一个MyClass类型的对象并在其上调用fun
:
int main(){
Functions::MyClass a;
std::vector<char*>vect;
a.fun(vect);
return 0;
}
您只能在函数中修改vect
的本地副本。要修复它通过引用函数传递向量:
void Functions::MyClass::fun(std::vector<char*>& vect){
vect.push_back("value 1");
vect.push_back("Save File Name");
}
当然,声明也应该相应改变。