1

我有以下主文件,我在其中尝试创建具有预定义值的地图并将其传递给其他方法进行进一步处理。主文件如下图所示:

int main(){
  map<id,Porto> _portoInit;

  id = 1;

  Porto p;
  p.val = 5;

  _portoInit.insert(pair<id, Porto>(id, p));

  Porto::setPorto(_portoInit);

  return 1;
}

其中 setPorto 在一个类下定义如下(在单独的文件中)

void Porto::setPorto( const map<id,Porto>&  _portoblock ) {
   //do stuffs
};

我收到错误提示“错误:无法调用成员函数......没有对象”我不是已经在主文件中声明了_portoInit的对象还是声明的错误方式?

4

3 回答 3

2

您需要通过实际对象调用该方法:

p.setPorto(_portoInit);

除非setPorto是一种static方法,否则您的代码无效。

于 2013-05-02T15:11:54.290 回答
1

setPorto是一个非静态成员函数,所以你需要在Porto实例上调用它。例如:

p.setPorto(_portoInit);

请注意,非静态成员函数采用(可能是 cv 限定的)类型 T* 的隐式第一个参数,因此您可以这样调用它:

Porto::setPorto(&p, _portoInit);

在这两种情况下,您都需要一个对象来调用成员函数。这就是编译器告诉你的。

于 2013-05-02T15:12:02.770 回答
1

你应该写

p.setPorto(_portoInit);

"::" 定义了函数的范围并且在上面是隐含的,因为被调用的函数的对象是一个 Porto。

于 2013-05-02T15:12:28.080 回答