永发信息网

visual c++ 6.0 工程中类模板问题

答案:2  悬赏:80  手机版
解决时间 2021-08-18 19:55

compare.h :

// compare.h: interface for the compare class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_COMPARE_H__9D81058A_2E7E_4AE7_884F_3398DE38EF7C__INCLUDED_)
#define AFX_COMPARE_H__9D81058A_2E7E_4AE7_884F_3398DE38EF7C__INCLUDED_
#include<iostream>
using namespace std;

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
template<class numtype>
class compare
{
public:
compare(numtype a,numtype b){x=a;y=b;}
template<class numtype>
numtype max();
template<class numtype>
numtype min();
private:
numtype x,y;
};

#endif // !defined(AFX_COMPARE_H__9D81058A_2E7E_4AE7_884F_3398DE38EF7C__INCLUDED_)

compare.cpp :

// compare.cpp: implementation of the compare class.
//
//////////////////////////////////////////////////////////////////////

#include "compare.h"
#include<iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
template<class numtype>
numtype compare<numtype>::max()
{
return (x>y)?x:y;
}
template<class numtype>
numtype compare<numtype>::min()
{
return (x<y)?x:y;
}

main.cpp :

#include "compare.h"
#include<iostream>
using namespace std;
int main()
{
compare<int>t(3,7);
cout<<"max="<<t.max()<<endl<<"min="<<t.min()<<endl;
return 0;
}

我点击一个函数 出现如下问题 好像是找不到我在compare.cpp中定义的max() min();

运行结果 执行exe时有如下错误:

Linking...
main.obj : error LNK2001: unresolved external symbol "public: int __thiscall compare<int>::max(void)" (?max@?$compare@H@@QAEHXZ)
main.obj : error LNK2001: unresolved external symbol "public: int __thiscall compare<int>::min(void)" (?min@?$compare@H@@QAEHXZ)
Debug/zuoye_6.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

zuoye_6.exe - 1 error(s), 0 warning(s)

执行生成.obj时无错误。

请高手帮忙 谢谢!

最佳答案
vc6不支持模版类分离实现
你需要把.cpp和.h中的声明和定义都放在.h中
另外 类声明的时候 只需要声明一次模版就够了
帮你修改如下

// compare.h: interface for the compare class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_COMPARE_H__9D81058A_2E7E_4AE7_884F_3398DE38EF7C__INCLUDED_)
#define AFX_COMPARE_H__9D81058A_2E7E_4AE7_884F_3398DE38EF7C__INCLUDED_
#include<iostream>
using namespace std;

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
template<class numtype>
class compare
{
public:
compare(numtype a,numtype b){x=a;y=b;}
numtype max();
numtype min();
private:
numtype x,y;
};

template<class numtype>
numtype compare<numtype>::max()
{
return (x>y)?x:y;
}
template<class numtype>
numtype compare<numtype>::min()
{
return (x<y)?x:y;
}

#endif // !defined(AFX_COMPARE_H__9D81058A_2E7E_4AE7_884F_3398DE38EF7C__INCLUDED_)
//main.cpp

main.cpp :

#include "compare.h"
#include<iostream>
using namespace std;
int main()
{
compare<int>t(3,7);
cout<<"max="<<t.max()<<endl<<"min="<<t.min()<<endl;
return 0;
}


全部回答

template<class numtype> class compare { public: compare(numtype a,numtype b){x=a;y=b;} template<class numtype> numtype max(); template<class numtype> numtype min(); private: numtype x,y; };

这个类声明的时候 template<class numtype> numtype max(); template<class numtype> numtype min(); 这两句 不用加template<class numtype>

只要numtype max(); numtype min(); 就可以了

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
麻烦高手修改华硕f83vf 208版bios 加入slic2.
龙之谷魔法师职业导师在哪?
春天的校园诗歌,描写春天校园的几句话
cf战队名可以这样吗??《Smˋ莫誩 、》
成了一枝淡淡的菊
David’s mother often _him_ his homework a
男人大便带血是什么原因
从乌鲁木齐到北京的飞机票和火车卧铺票都多少
《观潮》翻译后两段
一边是网恋,一边是现实你会怎样选择???
鼓楼区开封城墙文物保护管理所哪位知道具体地
摘抄红楼梦中经典段落,摘抄红楼梦中的100个好
怎样才会有微博
从佛山禅城怎么去广州最划算
青田欧通贷款公司
推荐资讯
哪位好心人送我一颗爱墙图标的种子啊?谢了
飞车里的字怎么变颜色啊
我在我得手机上牧场什么都能买。
神魔大陆游戏里面角色赚钱容易不?
安全教育的一年级美文,一年级什么大什么小的
武陵区常德八运茶楼KTV我想知道这个在什么地
夏邑县商丘大自然地板(福寿步行街)地址在哪,
关于日语1级语法 挨拶のかたがた
为什么自己幸福那不是幸福、使别人幸福那才是
什么是人??
华容县岳阳百元服饰品牌女装在什么地方啊,我
一个人无声无锡的说分手,那她还在呼我么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?