编译错误C++:不能调用对象函数
我在下面的主文件中尝试创建一个具有预定义值的映射,并将其传递给其他方法进行进一步处理。主文件如下所示:编译错误C++:不能调用对象函数,c++,C++,我在下面的主文件中尝试创建一个具有预定义值的映射,并将其传递给其他方法进行进一步处理。主文件如下所示: 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在一个类下
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的对象了吗?或者这是一种错误的声明方式?您需要通过实际对象调用该方法:
p.setPorto(_portoInit);
除非setPorto是静态方法,否则代码无效。您需要通过实际对象调用该方法:
p.setPorto(_portoInit);
除非setPorto是一个静态方法,否则您的代码无效。setPorto是一个非静态成员函数,所以您需要在Porto实例上调用它。例如:
p.setPorto(_portoInit);
请注意,非静态成员函数采用隐式的第一个参数,可能是cv限定类型T*,因此您可以这样调用它:
Porto::setPorto(&p, _portoInit);
在这两种情况下,都需要一个对象来调用其上的成员函数。这就是编译器告诉您的。setPorto是一个非静态成员函数,因此您需要在Porto实例上调用它。例如:
p.setPorto(_portoInit);
请注意,非静态成员函数采用隐式的第一个参数,可能是cv限定类型T*,因此您可以这样调用它:
Porto::setPorto(&p, _portoInit);
在这两种情况下,都需要一个对象来调用其上的成员函数。这就是编译器告诉您的。您应该编写
p.setPorto(_portoInit);
::定义了函数的作用域,在上面是隐式的,因为调用函数的对象是一个端口。您应该编写
p.setPorto(_portoInit);
::定义了函数的作用域,并且在上面是隐式的,因为调用函数的对象是一个Porto