模板类 实例化问题,OO新手求指导

newwst 2011-10-17 07:30:34
刚接触模板类。
具体问题是“模板类怎样用另一个类实例化”。我现在有两个类Stack和NineMap。

1、Stack是个栈的模板类,每个方法用基本数据类型测试均通过了。代码就不贴了。

2、NineMap是想要用来作为参数的类,调试也没有语法和逻辑错误。

3、问题出在实例化时,主函数中实例化Stack的代码我写的是

Stack <NineMap>S;

报错后又改成

Stack <class NineMap>S;

同样不通过。

书上和网上均只有对基本类型的讲解。不涉及用类初始化的问题。
正确的写法应当是怎样的?求高手指导。
...全文
122 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
newwst 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 frankhb1989 的回复:]
显式实例化:

C/C++ code
template Stack <NineMap>;
[/Quote]
再次感谢高手!刚学,原来ms的编译器ws这种分离的写法,哈哈。激动。
newwst 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kaile 的回复:]
.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class NineMap>::~Stack<class NineMap>(void)" (??1?$Stack@VNineMap@@@@QAE@XZ)
main.obj : error LNK2001: unresolved external s……
[/Quote]
通过!突然想起这个问题以前研究过,用类作为参数不能分开写。。。谢谢大神们!结贴给分~
newwst 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 frankhb1989 的回复:]
引用 11 楼 newwst 的回复:

引用 10 楼 kaile 的回复:
你需要把编译报错信息发上来,才知道到底类A缺了什么东西

.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class NineMap>::~Stack<class NineMap>(void)" (??1?$……
[/Quote]
放回来了,通过了!3Q。原来MS的真的声明不能和代码分离。
Kaile 2011-10-17
  • 打赏
  • 举报
回复
.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class NineMap>::~Stack<class NineMap>(void)" (??1?$Stack@VNineMap@@@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class NineMap>::Stack<class NineMap>(int)" (??0?$Stack@VNineMap@@@@QAE@H@Z)
Debug/Test1.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.


链接时找不到这个模板类, 你可以查下是否模板类声明和实现放在一个头文件里。
FrankHB1989 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 newwst 的回复:]

引用 10 楼 kaile 的回复:
你需要把编译报错信息发上来,才知道到底类A缺了什么东西

.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class NineMap>::~Stack<class NineMap>(void)" (??1?$Stack@VNineMap@@@@QAE@……
[/Quote]
明显是link-time error,就不要纠结语法了。
是把模版类的成员放到另外的源文件了吧。放回头文件。
export template只有在EDG前端编译器才能用,M$的不支持;而且被deprecated了。
FrankHB1989 2011-10-17
  • 打赏
  • 举报
回复
显式实例化:
template Stack <NineMap>;

FrankHB1989 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kaile 的回复:]
Stack <NineMap> S;
你这种是声明 ,不是实例化
[/Quote]
谁说的?
newwst 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kaile 的回复:]
你需要把编译报错信息发上来,才知道到底类A缺了什么东西
[/Quote]
.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class NineMap>::~Stack<class NineMap>(void)" (??1?$Stack@VNineMap@@@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class NineMap>::Stack<class NineMap>(int)" (??0?$Stack@VNineMap@@@@QAE@H@Z)
Debug/Test1.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

已经很接近答案了!鸡动啊!
Kaile 2011-10-17
  • 打赏
  • 举报
回复
你需要把编译报错信息发上来,才知道到底类A缺了什么东西
newwst 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kaile 的回复:]
B <A> objA;但是不通过

通不过的原因肯定是类A没有作为模板参数需要的特性, 不是任何类型都可以放到任何模板类中
[/Quote]
明白了~那具体怎么写呢?用A和B做例子的话。
Kaile 2011-10-17
  • 打赏
  • 举报
回复
B <A> objA;但是不通过

通不过的原因肯定是类A没有作为模板参数需要的特性, 不是任何类型都可以放到任何模板类中
newwst 2011-10-17
  • 打赏
  • 举报
回复
 
class A
{
//……
};

template <class T>
class B
{
//……
private:
T myVar;
};

int main()
{
B <int> objint;
B <char> objcha;
B <string> objstr;
return 0;
}



//现在,我想加上一句
//B <A> objA;但是不通过,很明显不是我这种写法。呵呵。
//试过LS的typedef,这位哥的指导是对的。不过没有通过,可能这种方法需要什么头文件。
//用没有不需要任何头文件,直接一句话搞定的代码?

newwst 2011-10-17
  • 打赏
  • 举报
回复

class A
{
……
};

template <class T>
class B
{
……
private:
T myVar;
};

int main()
{
B <int> objint;
B <char> objcha;
B <string> objstr;
//现在,我想加上一句
//B <A> objA;但是不通过,很明显不是我这种写法。呵呵。
//试过LS的typedef,这位哥的指导是对的。不过没有通过,可能这种方法需要什么头文件。
//用没有不需要任何头文件,直接一句话搞定的代码?

return 0;
}

newwst 2011-10-17
  • 打赏
  • 举报
回复
自己再顶一下
Kaile 2011-10-17
  • 打赏
  • 举报
回复
模板类怎样用另一个类实例化

typedef vector<string> v_string;

v_string my_v_str;


Stack <NineMap> S;
你这种是声明 ,不是实例化


可以改为
typedef Stack<NineMap> S;

S myS;
fankaili_2009 2011-10-17
  • 打赏
  • 举报
回复
没有代码说什么都没有用。
newwst 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mougaidong 的回复:]
说再多,没有代码也没用
[/Quote]呵呵,我问的是一个小白问题:“用类对模板类实例化的具体写法怎么写”。不是不贴代码额,是真的不需要代码额。
turing-complete 2011-10-17
  • 打赏
  • 举报
回复
说再多,没有代码也没用

64,682

社区成员

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

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