类模板与友元函数链接问题

原创 2015年07月07日 08:43:17
测试环境:windows 7 vs2013

1.代码

#include<iostream>

template<class T>
class Test
{
private:
	T m_x;

public:
	friend void print(const Test<T> &test);
	Test(T x) :m_x(x)
	{
	}
};
template<class T>
 void print(const Test<T> &test)
{
	std::cout << test.m_x<< std::endl;
};
int main()
{
	Test<int> test(1);
	print(test);

	std::cin.get();
	return 0;
}

上面的程序编译没有问题,链接时候会报如下的错误,错误    2    error LNK1120: 1 个无法解析的外部命令,错误  1  error LNK2019: 无法解析的外部符号 "void __cdecl print(class Test<int> const &)" (?print@@YAXABV?$Test@H@@@Z),该符号在函数 _main 中被引用 。

解决办法有两种

1.将友元函数放入函数内部

#include<iostream>

template<class T>
class Test
{
private:
	T m_x;

public:
	friend void print(const Test<T> &test)
	{
		std::cout << test.m_x << std::endl;
	}
	Test(T x) :m_x(x)
	{
	}
};

int main()
{
	Test<int> test(1);
	print(test);

	std::cin.get();
	return 0;
}

2.仍旧放在外部,采取声明等方式

#include<iostream>

template<class T>
class Test;
template<class T>
void print(const Test<T> &test);

template<class T>
class Test
{
private:
	T m_x;

public:
	friend void print<T>(const Test<T> &test);//这里<T>必不可少
	Test(T x) :m_x(x)
	{
	}
};
template<class T>
 void print(const Test<T> &test)
{
	std::cout << test.m_x<< std::endl;
};
int main()
{
	Test<int> test(1);
	print(test);

	std::cin.get();
	return 0;
}

版权声明:欢迎转载,如有不足之处,恳请斧正。

相关文章推荐

[solved] g++ 模板类中的友元函数 链接出错

[answer] 将模板类中关于友元函数的声明更改为:     template     class GenericList     {     public:       &#...

gcc的bug? c++模板类中友元函数的访问权限问题

在c++中,模板类中可以直接定义一个友元函数,

友元函数模板问题

今天下午写了一个友元函数的模板,其中在编译的时候碰到了一些问题。首先在编译的时候提示“note: (if this is not what you intended, make sure the fu...

c++模板友元函数 友元类

  • 2015-04-11 01:38
  • 323B
  • 下载

关于类模板的友元函数zz

以下内容转载自: http://www.cppblog.com/zhaoyao91/archive/2011/03/31/143148.html  注意:第三种方法本人验证编译有问题。(windo...

模板类和友元函数再探

C++友元函数

模板类和友元函数

模板类的友元分3类: 非模板友元 约束(bound)模板友元,即友元的类型取决于类被实例化时的类型。 非约束(undound)模板友元,即友元的所有具体化都是类的每一个具体化的友元。 1.模板类...

C++之模板(友元函数+友元类+静态Static)

友元函数 友元函数分为友元全局函数和友元成员函数。 下面是一个友元全局函数的例子:class Coordinate { friend void printXY(Coordinate &c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)