【问题标题】:c++ compiler error when using a generic class having struct member使用具有结构成员的泛型类时出现 c++ 编译器错误
【发布时间】:2012-04-01 19:47:44
【问题描述】:

我正在构建一个包含结构 TreeNode 的通用二叉树。我实现了一个函数 rootPtr(),它返回指向树根的指针。 binarytree.h 简单如下:

template <class T>
class BinaryTree {
public:

typedef struct TreeNode {
    T item;
    TreeNode *leftChildPtr; // pointer to left child
    TreeNode *rightChildPtr;

public:
    TreeNode(const T& nodeItem,
            TreeNode *left,
            TreeNode * right)
    : item(nodeItem), leftChildPtr(left), rightChildPtr(right) {
    }

    TreeNode(const T & nodeItem)
    : item(nodeItem) {
        leftChildPtr = NULL;
        rightChildPtr = NULL;
    }
  } TN; //end treenode

//Function prototype
TN* rootPtr() const;

private:
    TN *root;

} //end binarytree

这是来自 binarytree.cpp 的 sn-p,它会导致错误。

template <class T>
BinaryTree<T>::TN* BinaryTree<T>::rootPtr() {
    return root;
}

编译器报错错误:预期的构造函数、析构函数或'*'标记之前的类型转换
我以前见过这个错误,并通过使用 BinaryTree:: 处理它,但这次因为它是通用的,我不知道我该怎么办。任何帮助将不胜感激。

【问题讨论】:

    标签: c++ class generics struct tree


    【解决方案1】:

    简化的经验法则:当类在单独的 cpp 文件中有模板时,您不能定义成员函数。尝试将其与类定义放在一起,放在标题中;)

    【讨论】:

    • 我接受你的答案,但你知道这是解决方法。我仍然想知道我怎样才能以上面的格式做到这一点。
    【解决方案2】:

    尝试在函数定义中的返回类型前添加typename,因为TN 是依赖类的成员。

    【讨论】:

    • 添加typename 会产生另一个错误:在“TN”之前需要嵌套名称说明符ISO C++ 禁止声明没有类型的`TN' b>
    • 你是#includeing源文件中的头文件吗?
    猜你喜欢
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多