-1

我有一个包含一个主类和 2 个类的生成文件。问题是一个类依赖于另一个类,但是当我这样做时,它无法识别另一个类。这是我的 makefile 中的一个示例。

main : main.o class1.o class2.o
   g++ main.o class1.o class2.o -o main

main.o : main.cpp class1.h class2.h
   g++ -c main.cpp

class2.o : class2.cpp class2.h class1.h
   g++ -c class2.cpp

class1.o : class1.cpp class1.h class2.h
   g++ -c class1.cpp

当我进行制作时,终端一直告诉我在 class1 中没有 class2 之类的类型,反之亦然。

4

2 回答 2

2

你有一个循环包括,我的朋友。

当您包含in和in时, C++讨厌它。class1.hclass2.hclass2.hclass1.h

照 Ed Heal 所说的去做,你需要一个前向声明。注意:前向声明并不意味着放入#include "blah."对方的头文件中。

前向声明的示例:

类1.h:

class Class2;

Class1 {
  // members and stuff
  Class2 *class2; 
}

类2.h

#include "Class1.h"

Class2 {
  // members and stuff
  Class1 *class1;
}

看到不同?这很微妙,但很重要。实现应该在.cpp文件中。

另外,请确保您已安装了头部防护装置。谷歌“标题保护 C++”。这将为您指明正确的方向。

于 2013-09-21T18:12:15.740 回答
0

您需要在两者中使用前向声明或头#include文件class1.cppclass2.cpp

于 2013-09-21T16:47:42.830 回答