0

我想在我的 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");
}

主文件

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

2 回答 2

10

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

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

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

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

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

按值传递将在 中创建参数的副本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");
}
于 2013-06-11T16:56:09.147 回答
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");
    }
    

当然声明也应该相应地改变。

于 2013-06-11T16:59:19.710 回答