【问题标题】:Problems using my struct as a return type使用我的结构作为返回类型的问题
【发布时间】:2011-12-08 11:52:54
【问题描述】:

我正在构建一个包含私有结构“myNode”的模板类“myTree”。我还有一个私有函数“findNode”,我想返回一个 myNode*。但是,当我尝试定义“findNode”时,我收到 5 个错误,这些错误似乎源于第一个错误,即我在“myNode”和“*”之间缺少分号。

这是基本代码:

template <size_t N, typename ElemType>
class myTree {
public:
  //...
private:
  struct myNode{
    //...
  };
  myNode* findNode(const otherClass<N>& key);
};

template <size_t N, typename ElemType>
myNode* myTree<N, ElemType>::findNode(const otherClass<N>& key) {
  return 0;
}

我尝试将返回类型更改为 void,错误消失了,这意味着我认为我使用结构的方式有问题。

错误是: 1) 语法错误:缺少 ';'前 '*' 2) 缺少类型说明符 - 假定为 int 3) 'N' 未声明的标识符 4) 'ElemType' 未声明的标识符 5) 'N' 未声明的标识符

这些都指向函数声明行( myNode* myTree::findNode(const otherClass& key) { )。

【问题讨论】:

    标签: c++ struct


    【解决方案1】:

    myNode 是一个内部类,需要在返回类型中进行限定:

    template <size_t N, typename ElemType>
    typename myTree<N,ElemType>::myNode*
    myTree<N, ElemType>::findNode(const otherClass<N>& key)
    

    【讨论】:

    • 感谢您的快速响应 :) 您能告诉我为什么对于具有 void 返回类型但参数中的“myNode *”的不同方法我不需要限定 myNode *?函数声明如下template &lt;size_t N, typename ElemType&gt; void myTree&lt;N, ElemType&gt;::freeChildren(myNode* current) { ...
    • 在解析成员函数的参数时,很清楚解析的是一个函数,以及该函数是哪个类的成员。所以你只需要限定返回值,而不是参数。
    【解决方案2】:

    后面需要一个分号

      myNode* findNode(const otherClass<N>& key);
    

    【讨论】:

    • 哎呀,在实际代码中,忘记输入了。编辑,谢谢大声笑
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2022-07-22
    • 2019-06-21
    相关资源
    最近更新 更多