您的位置:首页 > 大数据 > 人工智能

error LNK2001: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > 的解决办法

2015-04-03 18:22 585 查看
#include <iostream>
#include <math.h>
using namespace std;
template<typename T>
class P
{
public:
P(int n=0){num=n;}
P(const P<T>& copy){num=copy.num;}
friend ostream&operator<<(ostream& out,P<T> & obj);

private:
int num;
};
template<typename T>
ostream&operator<< (ostream& out,P<T> & obj)
{
out<<obj.num;
return out;

}
int main(void)
{
P<int> t(2);
cout<<t;

return 0;
}

上述程序中定义了一个模板类,但出现了错误,如下:

1>------ 已启动生成: 项目: class, 配置: Debug Win32 ------

1>正在链接...

1>main6.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class P<int> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$P@H@@@Z),该符号在函数
_main 中被引用

1>F:\c++\c++ problem collections\class\class\Debug\class.exe : fatal error LNK1120: 1 个无法解析的外部命令

1>生成日志保存在“file://f:\c++\c++ problem collections\class\class\class\Debug\BuildLog.htm”

1>class - 2 个错误,0 个警告

========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

我觉得这个错误主要是重载std的<<运算符造成。解决办法有两个:

一个是直接在类模版中定义这个友元函数。如下:

#include <iostream>
#include <math.h>
using namespace std;
template<typename T>
class P
{
public:
P(int n=0){num=n;}
P(const P<T>& copy){num=copy.num;}
friend ostream&operator<<(ostream& out,P<T> & obj)
{
out<<obj.num;
return out;

}
private:
int num;
};

int main(void)
{
P<int> t(2);
cout<<t;

return 0;
}
另一个是:

<pre name="code" class="cpp">#include <iostream>
#include <math.h>
using namespace std;
template<typename T>
class P
{
public:
P(int n=0){num=n;}
P(const P<T>& copy){num=copy.num;}
friend ostream&operator<< <>(ostream& out,P<T> & obj);//friend ostream&operator<< <T>(ostream& out,P<T> & obj);
private:
int num;
};
template<typename T>
ostream&operator<< (ostream& out,P<T> & obj)
{
out<<obj.num;
return out;

}
int main(void)
{
P<int> t(2);
cout<<t;

return 0;
}



在声明中要多加一个<T>或者<>,在类外定义时不用加,加上就错了。

以上就提供了两种标准的解决办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐