问题描述:如题,先看不报错的代码如
template<class DataType = int>
class Test
{
public:
void Init(void(*fun)(Test<>&));
template<class DataType = int> //1
friend void fun(Test<DataType>& data);
priate:
DataType testData;
}
template<class DataType> //2
void fun(Test<DataType>& data)
{
//...
}
因为需求传递需要函数指针,通过fun函数对类内私有成员进行操作。
如果定义类内成员fun,则需要修改传参。但是非要用友元函数怎么办呢。
如果有1没有2,则报错:成员无法访问
如果没有1有2,则报错:无法解析的外部命令
如果没有1没有2,则报错:重定义
修改参考:https://www.cnblogs.com/smile233/p/8075521.html
还有很多修改的方法
https://blog.csdn.net/mind_v/article/details/70228402
https://blog.csdn.net/yyx112358/article/details/78515420
顺带,如果考虑模板类的派生,则: