我想知道我是否可以有两个类看起来像这样:
//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说"类'Small'没有名为'print()'的成员"。解决办法是什么?
下面应该可以工作,但是,您应该以这种方式构造类,基类应该真正具有派生类类型的成员。
然而,由于成员只是一个指针,代码应该仍然可以编译和工作,无论你要求错误。
你的代码的问题是类Small必须在你创建类Little之前定义,而在你创建Small
之前定义你应该在一个文件中这样做,因为它们是相互依赖的
//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的Little代码。但是,在这种情况下,您最好使用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){}
};
我也不认为你需要设置s为0,因为这是NULL,这应该是值,直到你创建一个指针使用new或assign一个指针