是否可以使用C+中的私有返回类型在类外定义函数+;? 我在我的大学中通过C++数据结构类工作,作为样式指南的一部分,任何类成员函数的长度超过10行代码必须在类之外定义。

是否可以使用C+中的私有返回类型在类外定义函数+;? 我在我的大学中通过C++数据结构类工作,作为样式指南的一部分,任何类成员函数的长度超过10行代码必须在类之外定义。,c++,oop,C++,Oop,目前我们正在构建一个二叉搜索树,我遇到了一种情况,我需要在类之外定义一个函数,因为它太长了。以下是它的一般形式和相关信息: 当前类别定义 template<typename T> class BST { private: struct Node { T data; Node* rightChild; Node* leftChild; } Node* searchNode(Node* node, const T&

目前我们正在构建一个二叉搜索树,我遇到了一种情况,我需要在类之外定义一个函数,因为它太长了。以下是它的一般形式和相关信息:

当前类别定义

template<typename T>
class BST {
private:
    struct Node {
        T data;
        Node* rightChild;
        Node* leftChild;
    }

    Node* searchNode(Node* node, const T& data) const {
        //Function definition, somewhat long
    }

public:
    //Other member functions
}
template<typename T>
class BST {
private:
    struct Node {
        T data;
        Node* rightChild;
        Node* leftChild;
    }

    Node* searchNode(Node*, const T&) const;

public:
    //Other member functions
}
#include "BST.h"

template<typename T>
Node* BST<T>::searchNode(Node* node, const T& data) const {
    //Function Declaration, somewhat long
}
模板
BST级{
私人:
结构节点{
T数据;
节点*右子节点;
节点*左子节点;
}
节点*搜索节点(节点*节点、常量和数据)常量{
//函数定义,有点长
}
公众:
//其他成员职能
}
因此,我只想在类声明中声明此函数,然后在单独的cpp文件中定义它,如下所示:

拟议BST.h部分

template<typename T>
class BST {
private:
    struct Node {
        T data;
        Node* rightChild;
        Node* leftChild;
    }

    Node* searchNode(Node* node, const T& data) const {
        //Function definition, somewhat long
    }

public:
    //Other member functions
}
template<typename T>
class BST {
private:
    struct Node {
        T data;
        Node* rightChild;
        Node* leftChild;
    }

    Node* searchNode(Node*, const T&) const;

public:
    //Other member functions
}
#include "BST.h"

template<typename T>
Node* BST<T>::searchNode(Node* node, const T& data) const {
    //Function Declaration, somewhat long
}
模板
BST级{
私人:
结构节点{
T数据;
节点*右子节点;
节点*leftChild;
}
节点*搜索节点(节点*,常数T&)常数;
公众:
//其他成员职能
}
拟议的BST.cpp部分

template<typename T>
class BST {
private:
    struct Node {
        T data;
        Node* rightChild;
        Node* leftChild;
    }

    Node* searchNode(Node* node, const T& data) const {
        //Function definition, somewhat long
    }

public:
    //Other member functions
}
template<typename T>
class BST {
private:
    struct Node {
        T data;
        Node* rightChild;
        Node* leftChild;
    }

    Node* searchNode(Node*, const T&) const;

public:
    //Other member functions
}
#include "BST.h"

template<typename T>
Node* BST<T>::searchNode(Node* node, const T& data) const {
    //Function Declaration, somewhat long
}
#包括“BST.h”
模板
Node*BST::searchNode(Node*Node,const T&data)const{
//函数声明,有点长
}
但是,我的编译器将不再识别节点类型,因为我现在在类之外。有什么办法可以很好地解决这个问题吗?或者我必须接受在类声明中定义的它


谢谢你的时间

这是可能的。因为返回类型在函数名之前,所以编译器还不知道您正在定义
BST
的成员,所以必须明确告诉它
Node
是该类的成员。您必须使用限定名称:

template<typename T>
typename BST<T>::Node* BST<T>::searchNode(Node* node, const T& data) const {
    //Function Declaration, somewhat long
}
这里,因为编译器已经看到该函数是
BST
的成员,所以它将在该类中查找
节点*


节点
是私有的这一事实在这里并不重要。私有名称
节点
正被成员函数定义“使用”,成员函数定义是类的一部分,因此允许访问。

您也应该阅读。工作得很好,Brian,感谢您的回复@如果这回答了你的问题,别忘了点击复选标记接受它