在类使用前声明了引用类,使用时还是提示“使用了未定义类型”怎么办?

elemusic 2011-09-25 12:29:04

#include <iostream>
#include <vector>

using namespace std;

class ICommand;//一早就声明这哥们

class ConcreteCommand
{
public:
vector<ICommand*> undoList;
ConcreteCommand(){}

void AddtoUndoCommand(ICommand* cmd)
{
undoList.push_back(cmd);
}

void UndoCommand()
{
if (!undoList.empty())
{
vector<ICommand*>::iterator pos;
pos = undoList.end() - 1;
(*pos)->Undo();//提示我说使用了未定义类型“ICommand”


}
}
};

class ICommand
{
public:
ConcreteCommand* Invoker;
ICommand(){}
virtual void Execute()
{

}
virtual void Undo()
{

}
};

int main()
{


return 0;
}

...全文
5686 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
elemusic 2011-09-25
  • 打赏
  • 举报
回复
哦哦,这样啊,菜鸟不懂,我以为要声明就要放前面,可以了......感谢!!!
fox000002 2011-09-25
  • 打赏
  • 举报
回复 3
弄反了,怎么把成员函数实现放前面了

elemusic 2011-09-25
  • 打赏
  • 举报
回复
不行,还是提示使用未定义类型ICommand...


#include <iostream>
#include <vector>

using namespace std;

class ICommand;

ICommand::ICommand(){}
ICommand::Execute(){}
ICommand::Undo(){}

class ConcreteCommand
{
public:
vector<ICommand*> undoList;
ConcreteCommand(){}

void AddtoUndoCommand(ICommand* cmd)
{
undoList.push_back(cmd);
}

void UndoCommand()
{
if (!undoList.empty())
{
vector<ICommand*>::iterator pos;
pos = undoList.end() - 1;
//(*pos)->Undo();


}
}
};

class ICommand
{
public:
ConcreteCommand* Invoker;
ICommand();
virtual void Execute();
virtual void Undo();
};

int main()
{


return 0;
}

fox000002 2011-09-25
  • 打赏
  • 举报
回复
成员声明和定义分离即可,把成员声明放前面

class ICommand
{
public:
class ConcreteCommand* Invoker;

ICommand();
virtual void Execute();

virtual void Undo();
};




ICommand::ICommand()
{}

void ICommand::Execute()
{}

void ICommand::Undo()
{}

stendson 2011-09-25
  • 打赏
  • 举报
回复
前置声明只是告知编译器存在这个类型,任何调用类型的成员和函数时,编译器都会去找它的定义
class ConcreteCommand;
class ICmmand
{
..........
}
class ConcreteCommand
{
...........
}
elemusic 2011-09-25
  • 打赏
  • 举报
回复
那我该怎么改?这两个类的函数可能要交差调用,所以谁在前都没用啊。
fox000002 2011-09-25
  • 打赏
  • 举报
回复
class ICommand; // 只是声明这是一个 class,有什么成员还不知道,只能定义指针类型 ICommand *

// 成员是没法访问的
elemusic 2011-09-25
  • 打赏
  • 举报
回复
不是应该找ICommand么?Undo是ICommand的一个方法啊
fox000002 2011-09-25
  • 打赏
  • 举报
回复
没有错啊,没有定义

代码中向前能找到 Undo() 吗?

65,182

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧