2011-07-09 115 views
2

不知道如果我能有两种类看起来像这样:传承与融合 - 基类的指针指向派生类

//file: Small.h 
#pragma once 
#include "Little.h" 

class Small : 
    public Little 
{ 
public: 
    Small(void){} 
    ~Small(void){} 

}; 

//file: Little.h 
#pragma once 
#include <iostream> 
#include "Small.h" 

using namespace std; 

//class Small; 
class Little 
{ 
public: 
    Little(){ s = 0; } 
    void print(){ cout << "oops!" << endl; } 
    Small* s; 
}; 

现在我的问题:当我想创建一个“Small”类型的对象并调用它的“print()”函数,VS-2010说“class'Small'没有名为'print()'的成员。什么是解决方案?

回答

0

下面应该可以工作,但是,您应该以这种方式构建类,基类应该确实具有派生类类型的成员。

但是,由于成员只是一个指针,代码仍然应该编译和工作,但是您要求错误。

与你的代码的问题是,你创建类一点一点地bfroe创建前级小必须定义小

你应该这样做在一个文件中,如下所示,因为它们是互

//file: SmallLittle.h 
#pragma once 
#include <iostream> 

using namespace std; 

class Small; 

class Little 
{ 
public: 
    Little(){ s = 0; } 
    void print(){ cout << "oops!" << endl; } 
    Small* s; 
}; 

class Small : 
    public Little 
{ 
public: 
    Small(void){} 
    ~Small(void){} 

}; 

但是,由于Small是Little的成员类型,因此您可能最好创建如下的单个类,使用代码的唯一原因是您可以使用Small代码,其中Small没有定义或使用。但是在这种情况下,您最好使用void *类型的指针。

如下

//file: Small.h 
#pragma once 
#include <iostream> 

using namespace std; 

class Small; 

class Small 
{ 
public: 
    Small(){ s = 0; } 
    void print(){ cout << "oops!" << endl; } 
    Small* s; 
    ~Small(void){} 
}; 

还有你,我不认为你需要发设置为0,因为这是空,直到你使用新分配的指针创建一个指针,它应该是值。

+0

谢谢你,但我找到了另一种方式。我的这些类的目的是访问基类函数“print()”。但是,如果我们将“Little”中的指针类型更改为“Little *”,我们仍然可以为其继承分配一个类型为“Small *”的指针。所以,我们可以使用这个函数“print()”。再次感谢你。 –

相关问题