成员模板的错误?? 求救(很简单的一个问题)

DEnzllWang 2003-11-13 11:52:56
class Love
{
public:
template <typename _T>
_T* Kiss(size_t szLen);
};

...

int main(void)
{
...
Love lover;
lover.Kiss<int>(32);//报错, 说是error C2062: type 'int' unexpected
...
}

在VC中编译出错.


...全文
35 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
cityyokel 2004-02-01
  • 打赏
  • 举报
回复
从C++标准来看,这样的定义是可以的。
找一个更符合C++标准的编译器吧。
warm_hcb 2004-02-01
  • 打赏
  • 举报
回复
class Love
{
public:
template <typename _T>
_T* Kiss(size_t szLen);
};

...

int main(void)
{
...
Love lover;
lover.template Kiss<int>(32);
//如果不能通过函数参数推出模板参数类型,就应该用到template
//这样写才能确定模板参数的类型,编译不过是编译器的问题
}
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
VC++6.0企業版﹐無patch.
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class PrintIt
{
public:
PrintIt( ostream &os ):_os( os )
{
}
template<typename elemType>
void print( const elemType &elem, char delimiter = '\n' )
{
_os << elem << delimiter;
}

private:
ostream _os;

};

int main()
{
PrintIt to_stand_out( cout );
to_stand_out.print( "hello" );
to_stand_out.print( 1 );
return 0;
}
sunwt 2004-02-01
  • 打赏
  • 举报
回复
你试过?
请教例子和环境,谢谢。
sunwt 2004-02-01
  • 打赏
  • 举报
回复
见D&E15.9.3
C++里不允许讲模板作为类成员。
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
我試過可以滴。。。。。。
gieroland 2004-02-01
  • 打赏
  • 举报
回复
vc60中常规类应该不允许有模板成员函数。
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
常規類可以有member template function.
sunwt 2004-02-01
  • 打赏
  • 举报
回复
常规类不允许有模板成员函数。
不过我不明白你为什么非要做成成员的呢?
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
我把它改成這樣﹕

#include <iostream>
using namespace std;
class Love
{
public:
template <typename _T>
_T* Kiss(_T szLen) //這里原來是_T* Kiss(size_t szLen); 我不知size_t為何物?
cout << szLen << endl;
return &szLen;
}
};


int main(void)
{
Love lover;
lover.Kiss(32);//??, ?是error C2062: type 'int' unexpected
return 0;
}

ps:我覺得這里有一個概念問題﹕
有member template function的類并不一定是class template,class template也不一定非得有member template function,那針對template function來講﹐它是通過傳入的值來推導實際型別的﹐而class template在使用時必須明確指出其member 的型別。
所以無須加上一個int.

class(或者說是對象)與function在使用template的機制是完全不同的。


還請大俠指教!
wbh0360 2004-02-01
  • 打赏
  • 举报
回复
你确定摸板函数的写法正确?
  • 打赏
  • 举报
回复
不是很清楚楼主是要干什么

你定义的这个成员函数使用来干什么的?
_T* Kiss(size_t szLen);
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
class Love
{
public:
template <typename _T>
_T* Kiss(_T);
};

template<typename T>
T* Love::Kiss(T szLen){ //我把size_t改成T了。
cout<<"Please love me"<<endl;
return new int;
}

int main(void)
{
Love lover;
lover.Kiss<int>(32); //這里若改成lover.Kiss(32)﹔可以通過運行!
}

同樣的代碼在VC++6.0里通不過﹐的確不枉雞丁兄(我們今天中午還吃了辣子雞丁呢)一片苦口婆心:
Jinhao 2004-02-01
  • 打赏
  • 举报
回复
template<typename T>
T* Love::Kiss(size_t szLen){
cout<<"Please love me"<<endl;
return new int; //我这里写错了,应该是 return new T;
}
Jinhao 2004-02-01
  • 打赏
  • 举报
回复
to 矛兄
typedef unsigned int size_t;
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class Love
{
public:
template <typename _T>
_T* Kiss(_T);
};

template<typename T>
T* Love::Kiss(T szLen){ //我把size_t改成T了。
cout<<"Please love me"<<endl;
return new int;
}

int main(void)
{
Love lover;
lover.Kiss<int>(32); //這里若改成lover.Kiss(32)﹔可以通過運行!
}


以上代碼在Dev-cpp 4.9.8.0可以通過!
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
雞丁兄的代碼我改了一下﹕
wangyangcheng 2004-02-01
  • 打赏
  • 举报
回复
請問雞丁﹕
size_t是什么意思?
謝謝!
Jinhao 2004-02-01
  • 打赏
  • 举报
回复
class Love
{
public:
template <typename _T>
_T* Kiss(size_t);
};

template<typename T>
T* Love::Kiss(size_t szLen){
cout<<"Please love me"<<endl;
return new int;
}

int main(void)
{
Love lover;
lover.Kiss<int>(32);
}
楼主的代码真的是一点问题都没有!完全符合常理。如果实在想这样实现代码,就换个编译器。g++
加载更多回复(10)

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧