我正面临错误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)给出错误? 如果我尝试在某个函数上使用它,它的工作正常只会在结构参数中使用时出错。
答案 0 :(得分:1)
这是编译器错误。如果用有效代码替换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;
}
N.B。由于帮助器类型位于ns2
中,您可以使用ADL而不是限定名称myfunc
。