【发布时间】:2020-02-22 03:54:34
【问题描述】:
我认为标题说明了一切。 MSVS 显示的错误是
非静态成员引用必须相对于特定对象
我的代码:
struct Node
{
Node(size_t id, int length, int size);
size_t id_;
int length_;
std::vector<Node*> children_;
};
class SuffixTree
{
public:
SuffixTree();
void printSuffixes();
void printSuffixes(Node* current = root_); // ERROR
~SuffixTree();
private:
Node *root_;
};
还有一些类似的方法,我希望用户从 main 调用这些方法,但由于 root_ 是私有的,我必须重载所有这些方法,而用户现在调用重载的方法。这些方法的定义很简单:
void SuffixTree::printSuffixes()
{
printSuffixes(root_);
}
有什么办法吗?
编辑:
void SuffixTree::printSuffixes(Node* current)
{
if (current == nullptr)
return;
if (current->length_ == -1)
std::cout << "leaf" << std::endl;
for (size_t i = 0; i < current->children_.size(); ++i)
printSuffixes(current->children_[i]);
}
【问题讨论】:
-
您不能使用类成员作为默认参数。摆脱它。
-
@NathanOliver 摆脱了什么?
-
= root_部分。 -
@NathanOliver 我知道我已经让代码工作了。我只是问是否有任何方法可以使其仅使用一个名为
printSuffixes(Node*)的函数工作 -
没有。您需要使用成员变量作为默认参数,但您不能这样做。你必须像你一样使用重载。
标签: c++