以下代码片段在 Visual Studio 和 g++ 中都可以正常工作。
template<typename T> class BST;
template<typename T>
class BSTNode
{
friend class BST<T>;
...
虽然这段代码在 VS 中工作正常,但在 g++ 中却不行
template<typename K, typename V> class Map;
template<typename K, typename V>
class MapPair
{
friend class Map<typename K, typename V>;
...
这段代码有什么问题?我得到的错误没有帮助,但它们在这里
error: wrong number of template arguments (1, should be 2)
error: provided for ‘template<class K, class V> struct Map’
error: friend declaration does not name a class or function
有什么想法吗?
最佳答案
说 friend class Map<K, V>;
. typename
只能用于限定从属名称,K
和 V
不是。
关于c++ - 多参数模板不能很好地处理友元声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242799/