古老的问题:由#include导致的编绎错误。

Yazy 2004-06-13 09:25:13
C++编绎器的#include所导致的编绎失败已经是盘古时代的问题,这个问题在C++程序员严格接受并遵守.h与.cpp之间的差异和条款之时就已经解决。

有了.NET之后,Microsoft C++引入了“托管”。习惯上的托管类代码是将所有定义全部塞在一个.h里面,这样做又重新使与文件包含问题浮现出来:

//在Form1.h里
...
namespace Sample
{
public __gc class Form1 : public System::Windows::Forms::Form
{
....
private: Form2 * m_pForm2; //引用Form2
};
}

//在Form1.cpp里
...
#include "Form2.cpp"
#include "Form1.cpp"


如果托管类Form2的两个文件:Form2.h和Form2.cpp里面不出现#include "Form1.h",那天空会一片晴朗,万里无云……但是如果Form2的两个文件类似:

//Form2.h
...
namespace Sample
{
public __gc class Form2 : System::Windows::Forms::Form
{
...
private: Form1 * m_pForm1; //引用Form1
}
}

//Form2.cpp
...
#include "Form1.h"
#include "Form2.h"


像上面那样子设计Form1和Form2的意思就是让两个类可以相互引用彼此的实例。
但是上面的代码在C++(Microsoft C++)编绎器里不能正常编绎,于是上面那个友好的设计一下子沉于水底,任天空再怎么明朗……

请问那位朋友可以帮忙解决这个问题?
...全文
25 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,654

社区成员

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

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