请问C 这种写法,错误怎么解决。

[复制链接]
查看11 | 回复6 | 2011-4-1 03:51:38 | 显示全部楼层 |阅读模式
文件1:node.h
--------------------------------------------------------------
#ifndef NODE_H
#define NODE_H
templateclass T
struct Node
{
T element;
bool echo;
Node *next;
Node *last;
Node(T ele,bool b=true);
};
#endif
--------------------------------------------------------------
文件2:node.cpp
--------------------------------------------------------------
#includeiostream
#include\"node.h\"
using namespace std;

templateclass T
NodeT::NodeT(T ele,bool b=true)
{
last=next=NULL;
echo=b;
element=ele;
if(echo){cout\"线型节点被建立,值为\"elementendl;}
};
--------------------------------------------------------------
文件3:try.cpp
#includeiostream
#include\"node.h\"
using namespace std;
int main()
{
Nodeint *n=new Nodeint(5);
//n-display();
delete n;
return 0;
}

编译后,提示error C2572: \'NodeT::NodeT\' : redefinition of default parameter : parameter 2,大概是重定义错误,请问为什么。我把node.cpp写在node.h里边那种方式就没有错误。
回复

使用道具 举报

千问 | 2011-4-1 03:51:38 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">模板在实例化要素中让编译器看到模板定义!请参考Tinking in C一书的第二卷第五章的内容
这个url中有个解释:<a href=\"http://blog.csdn.net/tyt2222008/archive/2010/07/16/5738646.aspx\" target=\"_blank\">http://blog.csdn.net/tyt2222008/archive/2010/07/16/5738646.aspx</a>

















<h4 class=\"ask\">追问





<pre class=\"replyask-text\" id=\"content-3146725\">看了你发的这个地址上写的文章,是不是不提倡这么分开写呀?
回复

使用道具 举报

千问 | 2011-4-1 03:51:38 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-3235208\">Q: 看了你发的这个地址上写的文章,是不是不提倡这么分开写呀?
A:是的,不提倡分开写! 这样做有利于编译器看到模板定义。如果你想深入了解这方面的内容,可以看一看STL的代码,那是template实现的典范 (STL的template声明与实现是放在同一个文件中的,:-) )
回复

使用道具 举报

千问 | 2011-4-1 03:51:38 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-3145522\">按照你这种改法,错误提示变了。
unresolved external symbol \"public: __thiscall Nodeint::Nodeint(int,bool)\" (??0?$Node@H@@QAE@H_N@Z)
这个我就看不懂了……
回复

使用道具 举报

千问 | 2011-4-1 03:51:38 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-3147378\">呃。。。貌似是因为模板类。
有些编译器不支持分离的方法
之前没注意到
回复

使用道具 举报

千问 | 2011-4-1 03:51:38 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-3150092\">可是我用VC6.0,看许多现成的东西,都有分开写的呀。
回复

使用道具 举报

千问 | 2011-4-1 03:51:38 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-3170348\">大哥,你答这么老些跟我问的无关的干什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行