【问题标题】:C++ template class's functionsC++模板类的功能
【发布时间】:2018-01-24 00:20:16
【问题描述】:

parent() 函数不允许代码编译;我不知道怎么了。编译器说:expected a qualified name after typename。 但是,构造函数正在工作。如何解决这个问题?

template<typename T>
class Node {
    public:

    //accessors
    Node<T>* parent() const;

    private:
    T Data;
    Node<T>* Parent;
    std::vector<Node<T>*> Children;

};

template<typename T>
Node<T>::Node(T const & data){
    this->Data = data;
}

template <typename T>
typename Node<T>* Node<T>::parent() const {
    return this->Parent;
}

【问题讨论】:

  • 你真的需要typename Node&lt;T&gt;* Node&lt;T&gt;::parent() const { return this-&gt;Parent; }中的typename吗?
  • 我在 parent() 的返回类型之前看到了一个奇怪的类型名。完整的错误信息是什么?

标签: c++ templates visual-c++


【解决方案1】:

您的代码有两个问题。

第一个问题是您在 Node 类中缺少构造函数声明。第二个问题是在 parent 的签名中使用 typename。

typename Node<T>* Node<T>::parent() const

Node 不是嵌套的依赖类型,所以这里使用 typename 是不正确的。请参阅this answer 了解更多信息。

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2013-08-19
    相关资源
    最近更新 更多