2015-04-05 160 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; 
}