• 全部
  • 问答

关于类的声明顺序的问题,请高手指教!

lujun2000 2003-06-28 10:53:49
如下几个类的声明:

//Personnel 系列
class Personnel
{
public:
virtual ~Personnel() = 0;
virtual void Pay() = 0;
virtual void Promote() = 0;
virtual void Accept(PersonnelV&) = 0;

protected:
Personnel();
};

class Officer : Personnel
{
public:
virtual void Pay();
virtual void Promote();
virtual void Accept(PersonnelV&);
};

class Captain : Officer
{
public:
virtual void Pay();
virtual void Promote();
virtual void Accept(PersonnelV&);
};

class First : Officer
{
public:
virtual void Pay();
virtual void Promote();
virtual void Accept(PersonnelV&);
};

//PersonnelV 系列
class PersonnelV
{
public:
virtual ~PersonnelV() = 0;
virtual void Visit(Personnel&) = 0;
virtual void Visit(Officer&) = 0;
virtual void Visit(Captain&) = 0;
virtual void Visit(First&) = 0;

protected:
PersonnelV();
};

class DoSomeThing : PersonnelV
{
public:
DoSomeThing();
~DoSomeThing();

virtual void Visit(Personnel&);
virtual void Visit(Officer&);
virtual void Visit(Captain&);
virtual void Visit(First&);
};

以上声明中,两个系列的类中都包含对方的实例,这样的话不管哪个放在前面哪个放在后面编译时都说找不到另一方………(Visual Studio.NET环境),不知该如何解决,请高手指教!
...全文
74 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
letok 2003-06-29
楼上的正解
回复
2608 2003-06-29
使用向前声明(forward declaration)

class class1;
class class2;

class class1
{...}

class class2
{...}


回复
goodluckyxl 2003-06-29
使用未定义类的实体前
先声明该类。
这是基本的工作/
回复
bluedodo 2003-06-29
gz
回复
kicool 2003-06-28
两个类的声明都放在定义前面!
回复
ntxs 2003-06-28
换个姿势,
再来一次。

如果是这样的话,类的设计本身就有问题。
不用这种方式的互相访问也应该能实现问题啊。

换个姿势,
再来一次。
回复
boyfling 2003-06-28
把类声明写在最前面试试
回复
lujun2000 2003-06-28
试过,但当调用PersonnelV的子类DoSomeThing里的方法时,编译出错:

error C2243: “类型转换” : 从“DoSomeThing *__w64 ”到“PersonnelV &”的转换存在,但无法访问
回复
qibo999 2003-06-28
前面先放一个类的声明,定义放到后面就可以了。
回复
harrypotter 2003-06-28
在VC6中可以在最前面加上class PersonnelV ;就可以了,
不过在。net下就不知道了。
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-06-28 10:53
社区公告
暂无公告