结构初始化

时间:2011-02-23 19:50:32

标签: c++ struct initialization

我使用了以下结构

template <typename Item>
struct TSet
{
    typedef std::set <int, comparator <Item>  >  Type;
};

作为结构的数据成员

template <typename Item>
struct TObject
{ 
   int code; 
   ...
   typename TSet <Item> ::Type indices;

   TObject ( const List <Item> *list ) : code( 0 ), indices ( list ) {}
 };

,其中

 template <typename Item>
 struct TList
 {
    typedef std::vector <Item> Type;
 };

template <typename Item>
class List
{
    private:
            typename TList <Item>::Type items;
};

但我已将数据模型更改为

template <typename Item> 
class TSet : public std::set <int, comparator <Item>  >
{
};

template <typename Item>
struct TObject
{ 
  int code; 
  ...
  typename TSet <Item> indices;

  TObject ( const List <Item> *list ) : code ( 0 ), indices ( list ) {} //Error: Can not convert parameter 1 const List <Item> to const TSet <Item>
 };

并且结构初始化存在问题。

Error: Can not convert parameter 1 const List <Item> to const TSet <Item>

问题出在哪里?

1 个答案:

答案 0 :(得分:0)

如果你没有写一个转换,为什么你会期望从List转换为TSet?此外,indices的类型在前面需要typename,因为它是依赖类型。