Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;使用befriending类的类型作为模板参数声明stl向量_C++_Templates - Fatal编程技术网

C++ c++;使用befriending类的类型作为模板参数声明stl向量

C++ c++;使用befriending类的类型作为模板参数声明stl向量,c++,templates,C++,Templates,我有以下代码: template <typename T> class A { friend class B; struct model_struct { [...] } } template <typename T> class B { func { typename vector<A<T>::model_struct > myVec; } } 模板 甲级{ B级朋友; 结

我有以下代码:

template <typename T>
class A {
    friend class B;
    struct model_struct {
       [...]
    }
}

template <typename T>
class B {
    func {
        typename vector<A<T>::model_struct > myVec;
    }
}
模板
甲级{
B级朋友;
结构模型{
[...]
}
}
模板
B类{
func{
类型名向量myVec;
}
}
向量声明给了我以下编译错误:

错误:“模板类std::vector”的模板参数列表中参数1的类型/值不匹配

错误:应为类型,获得“ObjectExtraction::model_struct”


有什么想法吗?

似乎缺少三件事:

  • 类定义末尾的分号
  • 友元声明中的模板参数
  • vector
    声明中的
    typename
    说明符
后者是导致错误的问题

我不确定
B
定义中的
func{…}
做什么;你可能想考虑删除它。

最后,您需要一个
B
模板的前向声明,这样您就可以在
a
中实际将其用于好友声明

下面是更正代码的尝试:

template <typename T>
class B; // Forward-declaration

template <typename T>
class A {
    friend class B<T>;  // template argument added
    struct model_struct {
       /*...*/
    };  // added semicolon
}; // semicolon added

template <typename T>
class B {
   /* Removed 'func'. */
   typename vector<typename A<T>::model_struct > myVec; // 'typename' added
};
模板
B类;//远期申报
模板
甲级{
friend类B;//添加了模板参数
结构模型{
/*...*/
};//添加了分号
}; // 添加分号
模板
B类{
/*删除“func”*/
typename向量myVec;//“typename”已添加
};

您应该这样修改:

template <typename T>
class A {
    friend class B;
    struct model_struct {
       [...]
    }
}

template <typename T>
class B {
    func {
        vector<typename A<T>::model_struct > myVec;
    }
}
模板
甲级{
B级朋友;
结构模型{
[...]
}
}
模板
B类{
func{
载体myVec;
}
}

什么是
func
呢?你试过把typename放在
A::model_struct
之前吗?由于
friend
声明中缺少模板参数,并且缺少分号(除了问题注释中提到的
func
问题之外),这将无法编译.因此,将typename放入向量声明中修复了它。我还需要向量前的类型名吗?@Mustafa不,你可以删除这个。非常感谢,我确实需要转发声明来修复出现的另一个错误。