c++ - 尝试使用在 cpp 文件的头文件中声明的私有(private)类时遇到问题

标签 c++

我正在执行一个二叉树实现,为此我有 2 个文件,一个头文件和一个实现 .cpp 文件。在头文件中,我在私有(private)区域中声明了一个类“Node”,在 .cpp 文件中我有一个返回“Node*”的函数,但是当我尝试编译我的代码时,我收到一条错误消息“未知类型函数声明中的“节点”。

相关代码:

//in .h
private:
    class Node {
        public:

            Node* left;
            Node* right;
            int data;
            Node(int n) {
                this->data = n;
                this->left = NULL;
                this->right = NULL;
            }


    };

//in .cpp
Node* Binary_Ordered_Tree_int::insert(Node* n, int i) {
  if(n == NULL) {
      return new Node(i);
  }
  if(n->data <= i) {
      n->right = insert(n->right, i);
  }
  else {
      n->left = insert(n->left, i);
  }
  return n;
}

提前致谢。

最佳答案

因为返回类型出现在函数名(及其包含的类)之前,编译器不知道它必须查看类内部。所以你要么告诉它:

Binary_Ordered_tree_int::Node* Binary_Ordered_tree_int::insert(Node* n, int i)

或者,如果您有可用的 C++11,则使用尾随返回类型,以便返回类型位于类的上下文中:

auto Binary_Ordered_tree_int::insert(Node* n, int i) -> Node*

关于c++ - 尝试使用在 cpp 文件的头文件中声明的私有(private)类时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078997/

相关文章:

c++ - 如何在 C++ 中实现带自动换行的日志记录宏

c++ - 唯一指针是否在堆或堆栈上分配内存?

c++ - 标准布局类上的偏移量?

c++ - glibc 检测到 *** free() 无效指针

c++ - 在凸包的弯曲点画圆

c++ - OpenMP 任务中的数据属性

c++ - 如何生成字符串差异 vector ?

c++ - 在 C++ 中,如何区分整数和字符?

c++ - math_3d.h 与 opengl

c++ - SDL_TTF 和 SDL 2 不能一起工作。给出未处理的异常