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

标签: 基础知识 标准
5758人阅读 评论(0) 收藏 举报
分类:
#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>或者<>,在类外定义时不用加,加上就错了。

以上就提供了两种标准的解决办法。


查看评论

error LNK2019: 无法解析的外部符号 "class std::vector<class std::basic_string<char,struct std::char_traits<cha

error LNK2019: 无法解析的外部符号 "class std::vector,class std::allocator >,class std::allocator,class std::a...
  • xiao_lxl
  • xiao_lxl
  • 2015-05-19 10:22:37
  • 6769

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

#include #include using namespace std; template class P { public: P(int n=0){num=n;} P(const P& ...
  • xiamentingtao
  • xiamentingtao
  • 2015-04-03 18:22:42
  • 5758

error LNK2019: 无法解析的外部符号 "void __cdecl cv::calcHist

今天用calcHist()写一个直方图的基本程序 结果报错LNK2019 在网上搜索一直是说库的链接不正确 但是我已经加入所有opencv的库了 最后的最后 发现是解决方案平台应该改成x64而不是Wi...
  • sinat_29547669
  • sinat_29547669
  • 2015-07-04 20:43:00
  • 17320

error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: struct std::_Wrap_alloc<class std::allocator

在win7+vs2017,Windows SDK版本号10.0.14393.0做开发时,使用std::vector的函数assign是,出现链接错误,解决方法,自己写for循环,进行赋值。...
  • u011417605
  • u011417605
  • 2018-01-22 16:16:21
  • 75

error LNK2001: 无法解析的外部符号 "__declspec(dllimport) class std::basic_ostream

调用静态库中的一个方法,然后本工程编译错误,找到静态库中使用了cout,导致的   去掉就可以了具体原因未找到,可能标准输出cout与哪里冲突了1>error LNK2001: 无法解析的外部符号 "...
  • u011737099
  • u011737099
  • 2018-01-19 10:57:49
  • 128

“error LNK2019: 无法解析的外部符号”问题解决方案

最近用VS2013编程时,出现如下错误: 错误 75 error LNK2019: 无法解析的外部符号 "public: __thiscall CmCurveEx::CmCurveEx(class...
  • u011450490
  • u011450490
  • 2015-09-23 10:32:13
  • 22480

使用log4cplus时遇到的链接错误:无法解析的外部符号 "public: __thiscall log4cplus::RollingFileAppender::RollingFileAppende

1>ImgProcess_server.skeleton.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall log4cplus::RollingFi...
  • ghost663527
  • ghost663527
  • 2015-07-10 11:18:29
  • 1731

由std::string继承引起的LNK 2005错误

小心由std::string继承引起的LNK 2005错误
  • DLite
  • DLite
  • 2013-12-12 17:20:03
  • 3981

error LNK2001: 无法解析的外部符号 "public: static class stdext::hash_map

inline size_t CString_hash_value( const CString& str) /*const*/{    size_t value = _HASH_SEED;    si...
  • carl2380
  • carl2380
  • 2010-03-22 13:43:00
  • 9695

c++ basic_strings

通用字符串类 该basic_string的是String类的任何字符类型(见字符串描述)的泛化。 模板参数 图表 字符类型。 该字符串是通过这种类型的字符序列形成的。 这应是一个非数组POD类型。 ...
  • qq125096885
  • qq125096885
  • 2016-04-30 22:44:49
  • 1394
    个人资料
    持之以恒
    等级:
    访问量: 34万+
    积分: 4749
    排名: 7613
    个人网站
    最新评论