test.htemplate<class T> T Foo() { return 0; }struct TestStruct
{
template<> friend TestStruct Foo<TestStruct>() { return TestStruct(); }
};template<class T> struct Test{
T Value;
Test(): Value(Foo<T>()){}
};
以上代码编译会出错C3637,该如何解决?
求教。
{
template<> friend TestStruct Foo<TestStruct>() { return TestStruct(); }
};template<class T> struct Test{
T Value;
Test(): Value(Foo<T>()){}
};
以上代码编译会出错C3637,该如何解决?
求教。
void ttt()
{
Test<TestStruct>();
Foo<TestStruct>();
}
compile
出错:
错误 3 error C2912: 显式专用化;“TestStruct Foo(void)”不是函数模板的专用化 d:\document\projects\test\win32simple\template.h 7 1 Win32Simple错误 2 error C3637: “Foo”: 友元函数定义不能是函数 模板 的专用化 d:\document\projects\test\win32simple\template.h 7 1 Win32Simple错误 1 error C2785: “T Foo(void)”和“TestStruct Foo(void)”具有不同的返回类型 d:\document\projects\test\win32simple\template.h 7 1 Win32Simple这段例子是一个大项目的一部分,定义模板的目的是以模板中定义的Foo初始化Test模板中的Value
按说不该出问题的。求解决。
很久没做C++了,话说实际上我现在都不知道这里为什么要声明friend了。
模板专用化后必须至少是friend才可访问吗?如果修改模板函数如何修改呢?我在网上找到过一个人提同样的问题,有人回答如下:class TestStruct
{
template <class TestStruct> friend TestStruct Foo(TestStruct ()) {
return TestStruct ();
}
};
LZ跟帖说问题解决,但在我这依然不行
错误 1 error C2440: “return”: 无法从“int”转换为“TestStruct” d:\document\projects\test\win32simple\template.h 3 1 Win32Simple如何在不做设计上的更改的前提下实现类似的功能呢。
struct TestStruct
{
};
template<> inline TestStruct Foo<TestStruct>() { return TestStruct(); } 这样算是没有错误编译通过了。
但不知设计上与原有差别有多少。
貌似用VS2003、2005编译原代码都可以,2008、2010就不行了。