好的,這真是太棒了。我從來沒有遇到過這樣的事情。我的程序的無法從其他名稱空間創建類的實例?
部分(編譯失敗)包含三個命名空間如下:
// 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()'
我從來沒有過遇到類似這樣的事情......這似乎真的很奇怪,我甚至不知道任何單詞/術語來描述這個問題。
我非常感謝任何幫助。
感謝,
你如何嘗試鏈接呢?你似乎忘記了鏈接到定義B的文件。 – Tim 2012-02-23 14:12:08
我以一種愚蠢的方式編譯整個程序。我只是「g ++ -Wall *」而已。也許這是一個問題? – 2012-02-23 14:16:19
這應該工作。我記得有內聯構造函數的問題,也許你可以嘗試刪除B :: Tree()和Tree ::〜Tree()之前的內聯() – Tim 2012-02-23 14:23:02