链接彼此引用的排序类。前锋不起作用

时间:2012-12-14 21:36:29

标签: c++ compilation linker makefile

我有以下两个类:

Foo,它有构造函数Foo(Bar *,int,int)

和Bar调用新的Foo(this,int,int)

我认为前进在Bar.h中声明Foo和/或Foo.h中的Bar会解决问题。

(返回的错误是新Foo上的“未定义引用”)

我正在使用Clang进行编译。

现在的链接顺序(但在两种情况下都发生相同的错误)是Foo然后是Bar。

关于我做错了什么的想法?

代码大致如下。遗憾的是,我无法显示任何真正的代码片段

  #include Bar.h 

 class Bar ; 

 class Foo { 
 public: 
 Foo(Bar* bar, int arg1, int arg2) ; 
 void method1()  {
     I access bar->field here
 }

然后是Bar的代码

  #include Foo.h 



  class Bar { 
  public:

   Bar() { 
    Cache* cache = new Cache(this, 0, 0) ; 
  } 

1 个答案:

答案 0 :(得分:1)

看起来应该是这样的(不包括警卫):

<强> foo.h中

class Bar;

class Foo {
  public:
    Foo(Bar*, int, int);
};

<强> bar.h

class Bar {
  public:
    Bar();
};

<强> foo.cc

#include "foo.h"
// Note: no need to include bar.h if we're only storing the pointer

Foo::Foo(Bar*, int, int) { ... }

<强> bar.cc

// Note: the opposite order would also work
#include "bar.h"
#include "foo.h"

Bar::Bar() {
  new Foo(this, int, int);
}

如果您从链接器获得“未定义的引用”,则可能使用与您定义的签名不同的签名声明Foo::Foo,或者根本没有定义它,或者没有链接到目标文件它被编译成。