[英]compilation error C++ : can not call member function without object
我有以下主文件,我尝试创建具有预定义值的地图,并将其传递给其他方法进一步处理。 主文件如下所示:
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
是static
方法,否则您的代码无效。
setPorto
是一个非静态成员函数,因此您需要在Porto
实例上调用它。 例如:
p.setPorto(_portoInit);
请注意,非静态成员函数采用隐式的第一个参数(可能是cv限定的)类型T *,因此您可以像这样调用它:
Porto::setPorto(&p, _portoInit);
在这两种情况下,您都需要一个对象来调用成员函数。 这就是编译器告诉你的。
你应该写
p.setPorto(_portoInit);
“::”定义了函数的范围,并且隐含在上面,因为调用函数的对象是Porto。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.