我在使用內部模板類 Node.js 時出現以下代碼錯誤。錯誤是在宣告根私有欄位時:
“成員根宣告為模板”。
template <typename KeyType, typename ValueType>
class TreapBST : public AbstractBST<KeyType, ValueType>
{
public:
.....
private:
template <typename K, typename V>
struct Node
{
....
};
template <typename K, typename V>
typename TreapBST<K, V>::Node<K, V>* root = nullptr;
};
uj5u.com熱心網友回復:
我認為您的基本想法是正確的,但語法卻很混亂。
當你寫一個類模板,你不需要不停地重復template <typename K, typename V>每個成員,除非你想要的K,并V有兩種型別是從類引數的不同KeyType和ValueType。如果您只需要KeyType并且ValueType不需要將成員重新宣告為模板。
例如,以下將編譯:
template <typename KeyType, typename ValueType>
class AbstractBST
{
//...
};
template <typename KeyType, typename ValueType>
class TreapBST : public AbstractBST<KeyType, ValueType>
{
public:
//...
private:
struct Node
{
KeyType key;
ValueType val;
//...
};
Node* root = nullptr;
};
int main()
{
TreapBST<std::string, int> treap;
return 0;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364330.html
