我试图将类模板声明为另一个类模板的朋友,因此一个类中的私有成员可以被另一个类访问。 例如,我有两个类如下:
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中,我没有在帖子中写。
答案 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);
}