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不,你可以删除这个。非常感谢,我确实需要转发声明来修复出现的另一个错误。