没有与构造函数调用的匹配函数(T *数据)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有与构造函数调用的匹配函数(T *数据)相关的知识,希望对你有一定的参考价值。

我的类节点是简单树的基本实现,其中每个节点都有两个子节点。我已经阅读了有关错误消息的10个答案,但我无法弄清楚,哪里出错了。

错误:没有用于调用'Lib::Node<Math::Expression*>::Node(Math::Expression*&)'的匹配函数

Lib::Node< Math::Expression* > Dirac::DiracParser::parse(std::string str) const{
    typedef Math::Expression* Expr; // Don't do this, as pointed out by Lightness Races in Orbit
    typedef Lib::Node<Expr> ExprNode;
    ExprNode root; // works
    Expr e = new Math::UnknownExpression();
    ExprNode root2(e); // yields error message
    return root;
}

和定义

namespace Lib{
    template <typename T>
    class Node{
        public:
            Node() : empty(true){}
            Node(T* t) : data(t), empty(false){}
            Node(T* t, Node<T>* l) : data(t), left(l), empty(false){}
            Node(T* t, Node<T>* l, Node<T>* r) : data(t), left(l), right(r), empty(false){}
            Node(const Node<T>& n) : data(n.data), left(n.left), right(n.right), empty(false){}
            inline bool isEmpty(){
                return empty;
            }
            ~Node(){}
            T* data;
            Node* left;
            Node* right;
        private:
            bool empty;
    };
}

据我所知,错误是指我的第二个构造函数未实现。我想我可能需要做一些指针体操才能正确传递,但我不知道怎么做。

答案

你实例化Lib::Node< Math::Expression* >,所以TMath::Expression*。构造函数接受T*

当你用T替换时,T*这个论点就变成了Math::Expression**。您尝试将Math::Expression*传递给构造函数,但没有构造函数可以接受它。

以上是关于没有与构造函数调用的匹配函数(T *数据)的主要内容,如果未能解决你的问题,请参考以下文章

构造函数中的“没有匹配的函数调用”

错误:在 C++ 中没有用于调用构造函数的匹配函数

为啥看似明确的类型提示构造函数调用存在“没有匹配的 ctor”?

C++ 使用继承时没有匹配的构造函数

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段