Не удается создать экземпляр класса из другого пространства имен?

Хорошо, это действительно странно. Ничего подобного не встречал.

Часть моей программы (Не удается скомпилировать) содержит три следующих пространства имен:

// namespaceA.h
namespace A {
enum Kind { jimmy, david };
}
// end of namespaceA.h

// namespaceB.h
#include "namespaceA.h"
namespace B {
class Tree {
    public:
    Tree *prev;
    Tree *next;
    Tree *down;
    A::Kind kind;

    Tree();
    ~Tree();
};
}
// end of namespaceB.h
// Implementation details of the class are placed in namespaceB.cc
// Constructor / Desctructor defined in the namespaceB.cc file!
// Something like this,
#include "namespaceB.h"
namespace B {
inline Tree::Tree() { ... }
inline Tree::~Tree() { ... }
}

// namespaceC.cc
#include "namespace.B"
namespace C {
void run() {
    B::Tree *tree;    // FINE
    B::Tree tree;     // Fail to compile!?
}
}
// end of namespaceC.cc

Теперь g ++ работает нормально, но компоновщик ld жалуется:

 "namespaceC.cc: undefined reference to `B::Tree::Tree()'
 "namespaceC.cc: undefined reference to `B::Tree::~Tree()'

Я никогда раньше не встречал ничего подобного ... Это просто кажется действительно странным, я даже не знаю слов / терминов, чтобы описать эту проблему.

Буду очень признателен за любую помощь.

Спасибо,

0
задан Jimmy Lu 23 February 2012 в 14:20
поделиться