0

我有以下代码:

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

template <typename T>
class B {
    func {
        typename vector<A<T>::model_struct > myVec;
    }
}

矢量声明给了我以下编译错误:

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

错误:需要一个类型,得到 'ObjectExtraction::model_struct'</p>

有任何想法吗?

4

2 回答 2

1

似乎缺少三件事:

  • 类定义末尾的分号
  • 朋友声明中的模板参数
  • 声明中的typename说明符vector

后者是导致错误的问题。

我不确定func {...}定义中的 the 是做什么的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
};
于 2012-10-15T02:12:04.117 回答
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;
    }
}
于 2012-10-15T02:12:19.870 回答