在C ++中将类模板声明为类模板的朋友

时间:2016-09-30 13:53:13

标签: c++ class templates friend

我试图将类模板声明为另一个类模板的朋友,因此一个类中的私有成员可以被另一个类访问。 例如,我有两个类如下:

Please provide input for test
ajar
1
mid ==> 4 and result ==> -1
1
mid ==> 1 and result ==> -1
1
mid ==> 0 and result ==> -1
result -1
Sorry, ajar is not a word

A.h
template <typename T>
class A {
    private:
       T content;
}

现在,我想让B级&lt; T&GT; A级朋友&lt; T&gt ;,所以我可以访问A类&lt; T&gt;的内容通过B类&lt; T&gt;的功能添加。所以,我在A.h中添加了几行:

B.h
#include "A.h"
template <typename T>
class B {
    public:
        void add(T);

    private:
        A<T>* ptr;
}

我使用Visual Studio,上面的代码会给我&#34;未解析的外部符号......&#34;错误(错误代码LNK2019)。 我尝试过其他变种,但我不断收到链接器错误。请帮帮我。谢谢。

函数add(T)的定义在B.cpp中,我没有在帖子中写。

1 个答案:

答案 0 :(得分:1)

以下代码在gcc上构建正常。我添加了B<T>::add(T)的定义,因为它缺失了。缺席导致link - not compilation! - error

很可能
template<typename T>
class B;

template <typename T>
class A {
    private:
       T content;

    friend B<T>;
};

template <typename T>
class B {
    public:
        void add(T t) { A<T> a; a.content = t; }

    private:
        A<T>* ptr;
};

int main() {
    A<int> a;
    B<int> b;
    b.add(3);
}