2013-06-20 168 views
0

我已經如下所示C++繼承問題,基類指針不能夠指向子類

#include <iostream> 

using namespace std; 

class A 
{ 
public: 
    virtual void doSomething(); 
}; 


void A::doSomething() 
{ 
    cout << "inside A" << endl; 
} 

然後被叫classA.h文件我有一個ClassB.cpp如下所示

#include "classA.h" 

class B : public A 
{ 
public: 
    void doSomething(); 
}; 

void B::doSomething() 
{ 
    cout << "class B" << endl; 

} 

那麼我classC.cpp如下圖所示

#include <iostream> 
#include "classA.h" 

using namespace std; 

class C : public B 
{ 
public: 
    void doSomething(); 
}; 


void C::doSomething() 
{ 
    cout << "classC" << endl; 
} 


int main() 
{ 
    A * a =new C(); 

    a->doSomething(); 


    return 0; 
} 

當我編譯如下圖所示,我得到錯誤

g++ -Wall classB.cpp classC.cpp -o classC 
classC.cpp:7: error: expected class-name before '{' token 
classC.cpp: In function 'int main()': 
classC.cpp:21: error: cannot convert 'C*' to 'A*' in initialization 

由於C從B,從A繼承繼承,我爲什麼不能說A * a = new C();

+8

你忘了'#include「classB.h」' –

+0

你需要整理你的包含文件和頭文件。我懷疑這與繼承有什麼關係。 – juanchopanza

+1

解決此問題後,可以通過在cpp文件中分離實現來解決以下鏈接器錯誤;) –

回答

0

你在你的main.cpp忘了包括 「classB.h」!

1

問題是B在classC.cpp中不可見。 Chrate文件classB.cpp並在其中移動B的聲明。然後將它包含在classC.cpp中。

+0

包含一個cpp文件? –

+0

對不起,這是錯誤的。實際上classB.cpp已經存在。創建classB.h並在其中聲明B. – ArmanHunanyan

+0

而'classC.h'也是。 – juanchopanza