我试图找到一种以特定方式声明函数的方法。代码如下所示:
template<typename T>
class Outer {
class Inner {
public:
friend void doSth(const typename Outer<T>::Inner& inner1, const typename Outer<T>::Inner& inner2);
}
}
我要做的是在声明之外定义此功能。我可以在内部轻松完成,但每当我尝试在VS2013之外定义它时会产生链接器错误。你能帮我解决这个问题吗?
是的,我尝试在内部类定义之前预先定义这些方法,但实际上没有什么对我有用
编辑:
template<typename T>
class Outer
{
public:
class Inner;
};
template<typename T> void doSth(typename Outer<T>::Inner&ob1, typename Outer<T>::Inner& ob2);
template<typename T>
class Outer<T>::Inner
{
friend void doSth<>(Inner& ob1, Inner& ob2);
};
template<typename T>
void doSth(typename Outer<T>::Inner&ob1, typename Outer<T>::Inner& ob2)
{
cout << "sth";
}
int main()
{
Outer<int>::Inner ob;
doSth(ob, ob);
return 0;
}
例如,这种方法会导致错误。
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl doSth(class Outer<int>::Inner &,class Outer<int>::Inner &)" (?doSth@@YAXAAVInner@?$Outer@H@@0@Z) referenced in function _main
1>Project.exe : fatal error LNK1120: 1 unresolved externals