声明嵌套类模板类的友元函数

时间:2015-04-22 20:23:05

标签: c++

我试图找到一种以特定方式声明函数的方法。代码如下所示:

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

0 个答案:

没有答案