我有两个类,Y
和X
,并Y
拥有一些静态成员——我试图通过一个X
实例访问它们:
template <class T>
class Y {
public:
Y() {
i = 0;
v = std::vector<int>(10, 10);
}
static int value() {
return v[i];
}
private:
static int i;
static std::vector<int> v;
};
class X : public Y<X> {
public:
X() {
}
};
int main() {
X *x(new X());
std::cout << x->value() << std::endl;
}
即使它编译,它也没有正确链接:
$ g++ t.cpp
/tmp/ccB4ijzw.o: In function `Y<X>::Y()':
t.cpp:(.text._ZN1YI1XEC2Ev[Y<X>::Y()]+0x11): undefined reference to `Y<X>::i'
t.cpp:(.text._ZN1YI1XEC2Ev[Y<X>::Y()]+0x4a): undefined reference to `Y<X>::v'
/tmp/ccB4ijzw.o: In function `Y<X>::value()':
t.cpp:(.text._ZN1YI1XE5valueEv[Y<X>::value()]+0x6): undefined reference to `Y<X>::i'
t.cpp:(.text._ZN1YI1XE5valueEv[Y<X>::value()]+0x10): undefined reference to `Y<X>::v'
collect2: ld returned 1 exit status
上下文(如果重要):
我正在尝试编写一个内存管理器——class Y
它静态地保存一个内存池,以便所有实例都class X
使用由Y
.
我不确定这是否是我想要做的最好的方法,但这是我迄今为止想到的最优雅的方法。非常欢迎任何想法。