繁体   English   中英

错误C2783:无法推断出结构参数的模板参数

[英]error C2783: could not deduce template argument for structure argument

我面临错误C2783。 我用类似结构的测试用例重现错误。
这是测试用例:

#include <iostream>

namespace ns1 {
    template <class T> class class_1 {};
}

namespace ns2 {
    using namespace ns1;
    template <typename T> inline ns1::class_1<T> myfunc();

    template<typename T>
    inline ns1::class_1<T> myfunc() {
            int a,b;
            std::cin>>a;
            std::cin>>b;
            if(a<b) return true;
            else return false;
    }

}


namespace ns3 {
struct myStruct {
    ns1::class_1<double> var1;
    ns1::class_1<double> var2;
    myStruct ( const ns1::class_1<double>& cl0= ns2::myfunc<double>(),
                    const ns1::class_1<double>& cl1= ns2::myfunc<double>()): var1(cl0), var2(cl1) {};
    };
}

错误是:
错误C2783:'ns1 :: class_1 ns2 :: myfunc(void)':无法推断出'T'的模板参数

我也想知道为什么它给27行(cl0)而不是28行(cl1)的错误? 如果我尝试在某些函数上使用它,则只能在结构参数中使用时给出错误。

这是一个编译器错误。 如果使用有效代码替换myfunc的内容(如建议的那样),它将仍然不起作用。 有关错误的描述,状态(和确认),请参阅Microsoft Connect 您可以尝试使用辅助类型来进行参数推导(有效):

namespace ns1 {
    template <class T> class class_1 {
    public: class_1 (int a, int b){}
    };
}

namespace ns2 {
    template<class T> struct deduction_helper{};

    using namespace ns1;
    template <typename T> inline ns1::class_1<T> myfunc(deduction_helper<T>);

    template<typename T>
    inline ns1::class_1<T> myfunc(deduction_helper<T>) {
        int a,b;
        std::cin>>a;
        std::cin>>b;
        ns1::class_1<T> c(a,b); return c;
    }

}


namespace ns3 {
    struct myStruct {
        ns1::class_1<double> var1;
        ns1::class_1<double> var2;

        myStruct ( const ns1::class_1<double>& cl0= ns2::myfunc(ns2::deduction_helper<double>()),
                   const ns1::class_1<double>& cl1= ns2::myfunc(ns2::deduction_helper<double>())
                 ): var1(cl0), var2(cl1) {};
    };
}

int main()
{
    ns3::myStruct x;
}

注意,因为辅助程序类型位于ns2 ,所以可以使用ADL代替限定名称myfunc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM