我遇到了循环引用的问题(即 Ah 和 Bh #包括彼此),有些人建议我使用 #pragma 一次来防止这种情况。但是,此解决方案似乎仍然无法正常工作。
发生的情况是 A 类不再在 Ah 以外的任何文件中被识别(甚至在 A.cpp 中也不被识别),B 类也是如此。
让我给你看一下代码:
啊
#pragma once
#include "B.h"
class A {
public: B* b;
};
溴化氢
#pragma once
#include "A.h"
class B {
public: A* a;
};
A.cpp
#include "stdafx.h"
#include "A.h"
#include "B.h"
B.cpp与A.cpp相同
错误跟踪如下所示:
1> B.cpp 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\bh(5): 错误 C2143: 语法错误: 缺少';' 在 ' ' 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\bh(5) 之前:错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\bh(5):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 1> A.cpp 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\bh(5): error C2143: syntax error: missing ';' 前 '' 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\bh(5):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\bh(5):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
还有两点我想澄清:
如何以及何时在 Visual Studio 2010 中使用 #include "stdafx.h"(我真的很讨厌这个 IDE,但它似乎是唯一一个与 C++ 兼容的 IDE——Netbeans 完全是这种语言的垃圾)
如何正确使用#pragma 一次?我假设我只是把它放在每个文件的第一行(好吧,显然这并不能解决我的问题!)。另外,它应该放在#include "stdafx.h" 之前还是之后?注意:我没有在 stdafx.h 中放置一次#pragma
谢谢。
编辑:我忘记了分号,因此原来的错误跟踪是臃肿的。Edit2:我忘了使用指针。我的实际程序确实使用了指针而不是普通的对象值,我在匆忙创建一个小例子时忽略了这一点。