2014-06-24 25 views
1

我试图在类模板的构造函数中初始化向量成员变量。我得到“'T'没有引用编译器的值”错误,因为T指的是一个类,所以我不能用这种格式来做我想要的。这里的构造函数的格式是什么? (我猜我需要转换吨至为const val_type,按照该constructor?)如何在类模板的构造函数中初始化向量成员变量

template <class T> 
    class PeripheralSystem { 
     public: 
      PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals, T) {}; 
      virtual ~PeripheralSystem(); 

     private: 
      std::vector<T> peripherals; 

    }; 
+1

你想要做什么?默认构造numPeripherals对象? – quantdev

+0

只要从构造函数中删除',T'就可以修复它,如果我正确地猜测你正在尝试做什么。 –

+0

@DrewDormann不适用于C++ 11 – Slava

回答

3

指出如果目的是用于vector具有numPeripherals元件的初始尺寸,然后使用

PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals) {}; 

现在peripherals将具有numPeripherals值初始化(这是默认的初始化如果T是一个类型)T的实例。

1

貌似你试图初始化vector<T>T类型的对象,因此使用这样的:

PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals, T()) {}; 
2

如果你想初始化默认值的所有元素使用此表单:

PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals, T()) {}; 

你可以省略该参数,std::vector构造有T()作为该参数,直到C++ 11默认值或有一个构造仅接受尺寸,因为:

// until c++11 
explicit vector(size_type count, 
       const T& value = T(), 
       const Allocator& alloc = Allocator()); 
// since c++11 
vector(size_type count, 
      const T& value, 
      const Allocator& alloc = Allocator()); 
explicit vector(size_type count); 

截至http://en.cppreference.com/w/cpp/container/vector/vector

相关问题