我有以下代码:
template <typename T>
class A {
friend class B;
struct model_struct {
[...]
}
}
template <typename T>
class B {
func {
typename vector<A<T>::model_struct > myVec;
}
}
向量声明给出了以下编译错误:
错误:模板参数列表中参数1的类型/值不匹配'template class std :: vector'
错误:期望一个类型,得到'ObjectExtraction :: model_struct'
任何想法?
答案 0 :(得分:1)
似乎缺少三件事:
typename
声明vector
说明符
后者是导致错误的问题。
我不确定func {...}
定义中的B
是做什么的;你可能想考虑删除它。
最后,您需要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
};
答案 1 :(得分:1)
您应该像这样修改:
template <typename T>
class A {
friend class B;
struct model_struct {
[...]
}
}
template <typename T>
class B {
func {
vector<typename A<T>::model_struct > myVec;
}
}