我有兩個班,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
提供。
我不確定這是否是我想要做的最好的方法,但是到目前爲止我認爲是最優雅的方式。任何想法都非常受歡迎。
啊,就是這樣。我不知道;非常感謝你!還有一個問題。由於我有兩個以上的成員,是否有任何合適的語法允許*多個定義* - 而不是繼續重複'template'?無論如何,它完美的作品! –
Rubens
@Rubens - 我不知道。但是,複製和粘貼該行只需要幾個擊鍵。 –