Хорошо, так что это действительно ужасно. Я никогда не встречал ничего подобного.Не удается создать экземпляр класса из другого пространства имен?
Часть моей программы (не удается скомпилировать) содержит три пространства имен следующим образом:
// 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
Теперь г ++ шел очень хорошо, но компоновщик л.д. жалуется:
"namespaceC.cc: undefined reference to `B::Tree::Tree()'
"namespaceC.cc: undefined reference to `B::Tree::~Tree()'
Я никогда никогда столкнулись с чем-то подобным раньше ... Это просто кажется странным, я даже не знаю никаких слов/терминов, чтобы описать эту проблему.
Я был бы очень признателен за любую помощь.
Спасибо,
Как вы пытаетесь его связать? Похоже, вы забыли связать с файлом, где B определен. – Tim
Я скомплектовываю всю программу глупо. Я просто "g ++ -Wall *" это. Может быть, это проблема? –
Это должно сработать. Я помню, что у меня были проблемы с встроенными конструкторами, возможно, вы могли бы попытаться удалить строку inline перед B :: Tree() и Tree :: ~ Tree() – Tim