在公共环境中调用Node Counting函数时,我得到了不兼容的声明,而在私有环境中,我的返回值与该函数不匹配,因此无法在测试驱动程序中进行调用。
浮点数,整数,空值,布尔值(我知道这很愚蠢)。
CPP
void BinaryTree::count(TreeNode* root) {
if(root == NULL)
return 0;
else
if(root->left == NULL && root->right == NULL)
return 1;
else
return count(root->left) + count(root->right) + 1;
}
标头(我想我需要将此标头公开,以便我可以调用测试驱动程序,但是我只能在Private中的CPP中声明。)
void count(TreeNode *);
驱动程序
cout << "Total Number of Nodes " << endl;
tree.count();
cout << endl;
在驱动程序测试中CPP tree.count是不可访问的,这是可以理解的,因为它是从私有调用的,但是作为公共调用,声明是不兼容的。
答案 0 :(得分:2)
void BinaryTree::count(TreeNode* root) { if(root == NULL) return 0; else if(root->left == NULL && root->right == NULL) return 1; else return count(root->left) + count(root->right) + 1; }
该操作返回一个 int (至少一个数字),它必须具有一个返回数字的签名,例如
int BinaryTree::count(TreeNode* root)
您的定义也很复杂,可以做到
int BinaryTree::count(TreeNode* root) {
return (root == NULL)
? 0
: count(root->left) + count(root->right) + 1;
}
并且由于它不会修改实例,因此使其成为const
int BinaryTree::count(TreeNode* root) const {
return (root == NULL)
? 0
: count(root->left) + count(root->right) + 1;
}
拥有
tree.count();
没有arg并明显地写出计数,您需要其他操作,如
void BinaryTree::count() const {
cout << count(..the tree node..);
}
该操作必须是公开的,可能上一个是私有的
无论如何,最好不要写计数,而要返回计数,让调用者随心所欲。
所以最终像这样:
// I use a _struct because fields accessible by BinaryTree
// but may be a class and BinaryTree is a friend class etc
struct TreeNode {
// ...
TreeNode * left;
TreeNode * right;
// ...
};
class BinaryTree {
public:
// ...
int count() const { return count(tree); }
// ...
private:
// ...
int count(TreeNode *) const;
// ...
TreeNode * tree;
// ...
};
int BinaryTree::count(TreeNode* root) const {
return (root == NULL)
? 0
: count(root->left) + count(root->right) + 1;
}
和cout << "Total Number of Nodes " << tree.count() << endl;
某处