2015-04-05 181 views
0

我想实现一个子类继承父类的构造函数,随后访问在该构造函数中初始化的父类的成员。访问父类的成员“非法使用非静态数据成员”C++

所以,我有这样的事情:

parent.h:

#include "myClass.h" 

class parent 
{ 

public: 

    myClass foo; 

    virtual void myFunc(); 

    parent(int a); 

}; 

parent.cpp:

#include "parent.h" 

parent::parent(int a) 
{ 

    foo = myClass(a); 

} 

void parent::myFunc() 
{ 
(do stuff) 
} 

child.h:

#include "parent.h" 

class child: public parent 
{ 

public: 

    using parent::parent; 
    void myFunc(); 

}; 

child.cpp:

#include "child.h" 

void myFunc() 
{ 
    myClass tmp = foo; 
} 

问题是,当我尝试访问child.cpp中myClass(foo)的实例时,出现错误“无效使用非静态数据成员'foo'”。奇怪的是,我可以从主程序访问foo(child.foo不会导致主要问题)。

我对C++非常陌生,所以如果对我的问题描述不当,我会提前道歉。在此先感谢您的任何建议!

+0

'void myFunc()'不是'child'的成员,而是一个常规的非成员独立函数,它恰好具有相同的名称。奇怪的是,你足够了解正确定义了'parent :: myFunc'。 – 2015-04-05 01:43:28

回答

2
void myFunc() 
{ 
    myClass tmp = foo; 
} 

定义了一个全局函数,而不是成员函数。添加类作用域以使其成为一个成员函数。

void child::myFunc() 
{ 
    myClass tmp = foo; 
}