2013-05-02 802 views
1

我有以下主文件,我尝试创建一个预定义值的映射,并将其传递给其他方法进一步处理。主文件被作为如下所示:编译错误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是一类下定义为下面的(在单独的文件)

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

我得到的“错误的错误提示:不能调用成员函数...没有对象“ 我没有在主文件中声明_portoInit的对象,或者它是一种错误的声明方式?

回答

2

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

p.setPorto(_portoInit); 

除非setPortostatic方法,你的代码是无效的。

1

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

p.setPorto(_portoInit); 

注意,非静态成员函数接受(可能CV合格)的隐含的首参数类型T *,所以你可以有人称它是这样的:

Porto::setPorto(&p, _portoInit); 

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

1

你应该写

p.setPorto(_portoInit); 

的“::”定义函数的范围和在上述隐含的,因为谁的功能是被称为是波尔图的对象。

相关问题