我想知道我是否可以有两个类看起来像这样:
//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'Fold'没有名为'print()'的成员。”解决方案是什么?
答案 0 :(得分:0)
以下应该可行,但是,您应该以这种方式构造类,基类应该具有派生类类型的成员。
然而,由于成员只是一个指针,代码应该仍然可以编译和工作,但是你要求错误。
您的代码问题是必须在创建类之前定义Small类Little和Little bfroe您创建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赋值指针创建指针。