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

时间:2012-10-15 02:02:35

标签: 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;
    }
}

向量声明给出了以下编译错误:

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

错误:期望一个类型,得到'ObjectExtraction :: model_struct'

任何想法?

2 个答案:

答案 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;
    }
}