2015-04-15 4 views
1

У меня есть два класса Один и два присутствуют в двух отдельных файлах cpp. Содержание являютсяC++-компоновщик библиотек с циклической зависимостью

#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() {} 
} 

создать статическую LIB одного и двух с использованием

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 

Для основной, я призываю соответствующие foo1 функции как классы и скомпилировать основной код следующим образом:

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

Код компилируется, даже если я изменяю порядок One и Two.

Я ожидал, что код не должен компилироваться, если я не повторю порядок 1 и 2, так как существует циклическая зависимость.

В чем может быть причина?

Я бегу Ubuntu 14.04 с г ++ версии 4.8.2

ответ

0

Я ожидал, что код не должен компилироваться

Во-первых, ваш код должен компилировать, но может не ссылку. Это разные.

Во-вторых, вы не указали содержание main.cpp. Если он ссылается на любой метод class One, то ваш код должен ссылка штраф.

Чтобы понять, почему, прочитайте this или this.