1

我在两个单独的 cpp 文件中有两个类一和二。内容如下

#include "One.h"
#include "Two.h"
namespace Sample 
{
  One::One() {}
  void One::foo1() {   
    Two t;
    t.foo();
  }   
  void One::foo()     {     }   
}

和 Two.cpp 是

#include "Two.h"
#include "One.h"
namespace Sample {
Two::Two()    {    }   
void Two::foo1() {
    One t;
    t.foo();
}   
void Two::foo()  {}   
}   

我使用创建一和二的静态库

g++ -c One.cpp; ar cr libOne.a One.o; ranlib libOne.a
g++ -c Two.cpp; ar cr libTwo.a One.o; ranlib libTwo.a

对于main,我调用foo1两个类的各自函数并编译main如下

g++ main.cpp -o main -L. -lOne -lTwo

即使我更改一和二的顺序,代码也会编译。

我期待代码不应该编译,除非我重复一和二的顺序,因为存在循环依赖。

可能是什么原因?

我正在使用 g++ 版本 4.8.2 运行 ubuntu 14.04

4

1 回答 1

0

我期待代码不应该编译

首先,您的代码应该可以编译,但可能无法链接。这些是不同的。

其次,您没有显示main.cpp. 如果它引用 的任何方法class One,那么您的代码应该可以正常链接。

要了解原因,请阅读thisthis

于 2015-04-18T03:35:36.310 回答