【发布时间】:2012-06-06 16:27:08
【问题描述】:
我遇到了循环引用的问题(即 A.h 和 B.h #包括彼此),有些人建议我使用 #pragma 一次来防止这种情况。但是,此解决方案似乎仍然无法正常工作。
发生的情况是 A 类不再在 A.h 以外的任何文件中被识别(甚至在 A.cpp 中也不被识别),B 类也是如此。
让我给你看代码:
啊.h
#pragma once
#include "B.h"
class A {
public: B* b;
};
B.h
#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\b.h(5):错误 C2143:语法错误: 失踪 ';'在“”之前 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\b.h(5):错误 C4430:缺少类型 说明符 - 假定为 int。注意:C++ 不支持默认整数 1>c:\用户\用户\文档\视觉工作室 2010\projects\envmodel\test\b.h(5):错误 C4430:缺少类型 说明符 - 假定为 int。注意:C++ 不支持 default-int 1> A.cpp 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\b.h(5):错误 C2143:语法错误: 失踪 ';'在''之前 1>c:\users\user\documents\visual studio 2010\projects\envmodel\test\b.h(5):错误 C4430:缺少类型 说明符 - 假定为 int。注意:C++ 不支持默认整数 1>c:\用户\用户\文档\视觉工作室 2010\projects\envmodel\test\b.h(5):错误 C4430:缺少类型 说明符 - 假定为 int。注意:C++ 不支持 default-int
还有两点我想澄清一下:
如何以及何时在 Visual Studio 2010 中使用 #include "stdafx.h"(我真的很讨厌这个 IDE,但它似乎是唯一一个与 C++ 兼容的 IDE - Netbeans 完全是这种语言的垃圾)
如何正确使用#pragma once?我假设我只是把它放在每个文件的第一行(好吧,显然这并不能解决我的问题!)。另外,它应该放在#include "stdafx.h" 之前还是之后?注意:我没有在 stdafx.h 中放一次#pragma
谢谢。
编辑:我忘记了分号,因此原来的错误跟踪是臃肿的。 Edit2:我忘了使用指针。我的实际程序确实使用了指针而不是普通的对象值,我在匆忙创建一个小示例时忽略了这一点。
【问题讨论】:
-
您需要在类定义的末尾使用分号
-
SO 帖子每个帖子应该有一个问题。如果您还有更多问题,请发布更多帖子。
-
相对于头文件的
#ifndef和#define指令,您将#pragma once放在哪里? - 你说“我假设我只是把它放在每个文件的第一行”。但它不应该遵循#define指令吗? -
C++ 不是 Java。对象变量不是引用。
-
由于您不了解该语言,因此您可能不会知道足够的知识来判断它的 IDE。