我有一個類:錯誤:預期型,得到了「結構」 C++
template <typename T>
class btree {
public:
btree(size_t maxNodeElems);
~btree() {}
struct node {
list <T> elements;
node *lvl;
};
private:
size_t maxNodeElems;
node* root;
};
template <typename T>
btree<T>::btree(size_t maxNodeElems) {
if (maxNodeElems > 0) maxNodeElems = maxNodeElems;
root = new node;
root->lvl = new node[maxNodeElems+1];
}
template <typename T>
pair <typename btree<T>::iterator, bool> btree <T>::insert (const T& elem) {
pair <btree<T>::node, bool> start;
start = addElement (elem, *root);
pair <typename btree<T>::iterator, bool> final;
return final;
}
template <typename T>
pair <btree<T>::node, bool> btree<T>::addElement (const T& e, btree<T>::node*& n) {
n->elements.push_back(e);
return make_pair(*n, true);
}
,它一直給錯誤是:
error: expected a type, got 'btree::node'
error: invalid type in declaration before ';' token
At global scope:
error: type/value mismatch at argument 1 in template parameter list for 'template<class _T1, class _T2> struct std::pair'
error: expected a type, got 'btree::node'
這似乎就行了發生的事情:
pair <btree<T>::node, bool> btree<T>::addElement (const T& e, btree<T>::node*& n) {
我在頭上調用它的方式,我不明白爲什麼它說我沒有給它正確的類型。誰可以給我解釋一下這個?
你的構造也不例外安全。你應該避免說'new',或者如果你在構造函數中不止一次說'new',就要非常小心。 –
@KerrekSB你能解釋一下你的意思嗎? – SNpn
想象一下,如果第二個'new'表達式(對於'root-> lvl')拋出一個異常會發生什麼......讓我知道你是否想要一些建議。 –