怎么调用在类里面的一个template函数

q523053 2010-11-27 04:01:34
类的.cpp文件:
#include "Tmp.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTmp::CTmp()
{

}

CTmp::~CTmp()
{

}
template <typename structTmp>
BOOL CTmp::SendTmpl(BYTE emType,typename structTmp)
{
// int len=sizeof(tagSend)+sizeof(typename);
//
// char *szBuffer=new char[len];
// memset(szBuffer,0,len);
// ((tagSend*)szBuffer)->szType = emType;
// memcpy( ( (tagSend*)szBuffer )->szVod,&structTmp ,sizeof(structTmp) );
// int ret=Send( szBuffer,len);
// delete[] szBuffer;
return TRUE;
}

类的头文件:
class CTmp  
{
public:
CTmp();
virtual ~CTmp();
template <typename structTmp>
BOOL SendTmpl(BYTE emType,typename structTmp);

};

怎么使用????
#include <iostream>
#include "Tmp.h"
#include "afx.h"

enum{TLOGIN,TREGISTER};

//通用的发送结构体
struct tagSend{
//TCHAR szType[8];
BYTE szType;
char szVod[1];//内存强制扩充
//void *szVod;
};

//用户登陆结构
struct tagLoginData
{
TCHAR szId[11]; //用户名字
TCHAR szPsw[11];
};

void main()
{
CTmp tmp;
tagLoginData ld;
memset(&ld,0,sizeof(tagLoginData));
strcpy(ld.szId,"admin");
strcpy(ld.szPsw,"admin");

tmp.SendTmpl(TLOGIN,ld);
}
会提示错误:1.obj : error LNK2001: unresolved external symbol "public: int __thiscall CTmp::SendTmpl(unsigned char,struct tagLoginData)" (?SendTmpl@CTmp@@QAEHEUtagLoginData@@@Z)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
q523053 2010-11-27
  • 打赏
  • 举报
回复
感谢您,高手!
解决了,呵呵
	template <typename structTmp>
BOOL SendTmpl(BYTE emType,void *addr, structTmp tmp)
{
int len=sizeof(tagSend)+sizeof(tmp);

char *szBuffer=new char[len];
memset(szBuffer,0,len);
((tagSend*)szBuffer)->szType = emType;
memcpy( ( (tagSend*)szBuffer )->szVod,addr,sizeof(tmp) );
int ret=Send( szBuffer,len);
delete[] szBuffer;
return ret;
}
Csuxiaowu 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 q523053 的回复:]

memcpy的第二个参数要取地址,怎么取typename 参数的地址?
[/Quote]
我不清楚你是要实现啥呢
BOOL SendTmpl(BYTE emType,typename structTmp)

后面那个参数 改成 structTmp XXX吧
q523053 2010-11-27
  • 打赏
  • 举报
回复
memcpy的第二个参数要取地址,怎么取typename 参数的地址?
Csuxiaowu 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q523053 的回复:]

引用 1 楼 csuxiaowu 的回复:
把 模板 声明 与 定义 放一起去
谢谢,你说的没错,放到.h文件里这个测试程序就ok了
但是,
C/C++ code
template <typename structTmp>
BOOL SendTmpl(BYTE emType,typename structTmp)
{
int len=sizeof(tagSe……
[/Quote]
你还是把你改了之后的代码贴上来下
q523053 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]
把 模板 声明 与 定义 放一起去
[/Quote]谢谢,你说的没错,放到.h文件里这个测试程序就ok了
但是,
template <typename structTmp>
BOOL SendTmpl(BYTE emType,typename structTmp)
{
int len=sizeof(tagSend)+sizeof(typename);

char *szBuffer=new char[len];
memset(szBuffer,0,len);
((tagSend*)szBuffer)->szType = emType;
memcpy( ( (tagSend*)szBuffer )->szVod,&structTmp ,sizeof(structTmp) );
int ret=Send( szBuffer,len);
delete[] szBuffer;
return TRUE;
}

error C2275: 'structTmp' : illegal use of this type as an expression这个问题怎么解决?
Csuxiaowu 2010-11-27
  • 打赏
  • 举报
回复
把 模板 声明 与 定义 放一起去

64,654

社区成员

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

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