【发布时间】:2012-02-23 14:07:03
【问题描述】:
好的,这真的很奇怪。我从来没有遇到过这样的事情。
我的部分程序(编译失败)包含三个命名空间,如下:
// 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 的文件。
-
我以一种非常愚蠢的方式编译整个程序。我只是“g++ -Wall *”它。也许这是个问题?
-
应该可以。我记得内联构造函数有问题,也许你可以尝试删除 B::Tree() 和 Tree::~Tree() 前面的内联
-
是的!那确实解决了! stackoverflow 上的你们太有帮助了!非常感谢
标签: c++ class namespaces