【发布时间】:2011-10-23 11:20:09
【问题描述】:
我有一个模板类 btree,并在头文件的公共定义中定义了一个结构节点
struct Node {
vector<Node> chi_;
vector<T> val_;
Node *par_;
Node(size_t n, Node *parent) : par_(parent) {
chi_.reserve(n+1);
val_.reserve(n);
}
~Node() {
chi_.clear();
val_.clear();
}
};
作为我的 operator= / 复制构造函数的一部分,我想创建一个递归函数 'addAll'
template <typename T>
void btree<T>::addAll(struct Node* &one, struct Node* const& two) {
for(unsigned int a = 0; a < two.val_.size(); a++)
one.val_.push_back(two.val_.at(a));
for(unsigned int a = 0; a < two.chi_.size(); a++) {
Node *newNode = new Node(max, one);
addAll(newNode, two.chi_.at(a));
one.chi_.push_back(newNode);
}
}
函数声明对我来说很奇怪——我尝试了一些简单的东西,比如 btree:addAll(节点 &one, const 节点 &two) 但这产生了很多难以理解的编译器错误,但我终于通过在上面声明它来接受所述函数的存在+有
void addAll(struct Node*&, struct Node* const&);
在我的头文件中。
我现在遇到的问题是在我的函数中访问节点的数据元素,我得到以下编译错误:
btree.tem:28:23: error: request for member 'val_' in 'two', which is of non-class type 'btree<long int>::Node* const'
btree.tem:29:3: error: request for member 'val_' in 'one', which is of non-class type 'btree<long int>::Node*'
btree.tem:29:3: error: request for member 'val_' in 'two', which is of non-class type 'btree<long int>::Node* const'
btree.tem:31:23: error: request for member 'chi_' in 'two', which is of non-class type 'btree<long int>::Node* const'
btree.tem:33:3: error: request for member 'chi_' in 'two', which is of non-class type 'btree<long int>::Node* const'
btree.tem:34:3: error: request for member 'chi_' in 'one', which is of non-class type 'btree<long int>::Node*'
不太确定我在这里是否正确地声明了事情,但这个特殊的问题真的让我很难过(接近一天半的不同方法来修补它,但无济于事)
【问题讨论】: