【发布时间】:2011-04-26 21:17:51
【问题描述】:
我确信这个问题被问了很多,但我似乎找不到任何相关的东西。我在 C++ 项目中有多个源文件。在典型的方式中,有多个带有类和函数声明的头文件以及关联的源文件及其定义。问题是,当我尝试使用在另一个文件中定义的一个类作为另一个文件中的类的成员时,即使使用 #include 指令,我也会遇到编译错误。解决这个问题的方法是先对类进行原型设计(这是正确的词吗?),然后再将其声明为成员。因此,如果 ClassA 在一个文件中,而 ClassB 在另一个文件中,并且我想在 ClassB 中使用 ClassA 成员,我必须写:
// ClassA.h
class ClassA {
public: ClassA (void); };
// ClassB.h
class ClassA; // prototype
class ClassB {
public: ClassA* ca; };
这正常吗?不管我使用指针还是实例,我仍然必须对它们进行原型设计。我发现如果结构和枚举位于单独的文件中,我还必须对其进行原型设计。我似乎无法在多个文件中使用使用#define 或const 声明的常量我收到未定义的错误,因此我不确定如何为它们提供更多文件范围。 typedefs 也是如此。我确信有一些我不记得的简单解决方法......感谢任何帮助!
【问题讨论】:
-
enum的前向声明(您命名为“原型设计”的功能)仅在 C++0x 中允许并且仅在您同时声明基础类型时才允许。 -
我以为
enums 总是属于int?但无论哪种方式,当我转发声明时,声明底层类型的语法是什么?
标签: c++ scope declaration definition