古老的问题:由#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++)编绎器里不能正常编绎,于是上面那个友好的设计一下子沉于水底,任天空再怎么明朗……
请问那位朋友可以帮忙解决这个问题?