【发布时间】:2020-01-29 18:20:16
【问题描述】:
当我尝试编译时,我收到一个奇怪的错误:“覆盖虚函数返回类型不同且不是协变的”,我认为问题出在 Node.js 上。我觉得BTree<T>::Node和BSTree<T>::Node不一样。
基类:
#ifndef BINARY_TREE_H
#define BINARY_TREE_H
template < typename T >
class BTree {
protected:
struct Node {
T key;
Node* left;
Node* right;
Node() {}
Node(
const T& key,
Node* left = nullptr,
Node* right = nullptr)
: left(left), right(right), key(key) {}
};
public:
BTree();
virtual ~BTree();
virtual Node* search(const T& key);
private:
Node* search(const T& key, Node* root);
private:
Node* root;
};
template < typename T >
typename BTree<T>::Node* BTree<T>::search(const T& key, BTree<T>::Node* root) {
//some code
}
template < typename T >
typename BTree<T>::Node* BTree<T>::search(const T& key) {
return search(key, root);
}
#endif // BINARY_TREE_H
派生类:
#ifndef BINARY_SEARCH_TREE_H
#define BINARY_SEARCH_TREE_H
#include "binary_tree.h"
template < typename T >
class BSTree : public BTree<T> {
protected:
struct Node {
T key;
Node* left;
Node* right;
Node() {}
Node(
const T& key,
Node* left = nullptr,
Node* right = nullptr)
: left(left), right(right), key(key) {}
};
public:
BSTree();
~BSTree() override;
Node* search(const T& key) override;
private:
Node* search(const T& key, Node* root);
private:
Node* root;
};
template < typename T >
typename BSTree<T>::Node* BSTree<T>::search(const T& key, BSTree<T>::Node* root) {
//some code
}
template < typename T >
typename BSTree<T>::Node* BSTree<T>::search(const T& key) {
return search(key, root);
}
#endif // BINARY_SEARCH_TREE_H
【问题讨论】:
-
#define __BINARY_TREE__该标识符保留给语言实现。您应该使用另一个标头保护。 -
为什么要在
BSTree中重新定义Node?
标签: c++ class oop virtual-functions