在 C++ 中将 class 模板声明为 class 模板的友元
Declaring a class template as a friend of a class template in C++
我正在尝试将一个 class 模板声明为另一个 class 模板的友元,这样一个 class 中的私有成员可以被另一个访问。
例如我有两个 classes 如下:
A.h
template <typename T>
class A {
private:
T content;
}
和
B.h
#include "A.h"
template <typename T>
class B {
public:
void add(T);
private:
A<T>* ptr;
}
现在,我想让 class B 成为 classA 的朋友,这样我就可以访问 classA 的内容通过classB的函数添加。所以,我在 A.h:
中添加了几行
A.h
template <typename T> class B;
template <typename T>
class A {
friend class B<T>;
...
我正在使用 Visual Studio,上面的代码会给我 "unresolved external symbol..." 错误(错误代码 LNK2019)。
我尝试了其他变体,但我一直收到链接器错误。请帮帮我。谢谢。
函数 add(T) 的定义在 B.cpp 中,我没有在 post 中写。
以下代码在 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);
}
我正在尝试将一个 class 模板声明为另一个 class 模板的友元,这样一个 class 中的私有成员可以被另一个访问。 例如我有两个 classes 如下:
A.h
template <typename T>
class A {
private:
T content;
}
和
B.h
#include "A.h"
template <typename T>
class B {
public:
void add(T);
private:
A<T>* ptr;
}
现在,我想让 class B
A.h
template <typename T> class B;
template <typename T>
class A {
friend class B<T>;
...
我正在使用 Visual Studio,上面的代码会给我 "unresolved external symbol..." 错误(错误代码 LNK2019)。 我尝试了其他变体,但我一直收到链接器错误。请帮帮我。谢谢。
函数 add(T) 的定义在 B.cpp 中,我没有在 post 中写。
以下代码在 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);
}