Visual Studio 2012中的模板类实例化错误

时间:2013-09-15 15:41:10

标签: c++ c++11 compiler-errors

我有一个带有参数化构造函数的类模板。

template <typename value_t>
class A
{
  protected:

    std::vector<value_t> data;
    int n;

  public:

    A(const int num):n(num) {}
};

我试图以这种方式实例化

class B
{
  protected:
    A<float> position(256);

  public:
    B() {}
};

导致MSVC(Visual Studio 2012)中出现以下错误

智能感知:预期类型说明符

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

A<float> position(256);

应该是

A<float> position{256};
//               ^   ^

但我不确定VS2012是否支持此C ++ 11功能......

否则,您可以使用member-initialization-list执行此操作:

class B
{
  protected:
    A<float> position;
    //               ^

  public:
    B() : position(256)
    //    ^^^^^^^^^^^^^
    {}
};

答案 1 :(得分:2)

您需要将参数传递给拥有类的构造函数中的成员构造函数。因此,在您的情况下,您需要将值256传递给B的构造函数中的position成员。工作代码如下:

#include <vector>
template <typename value_t>
class A
{
  protected:

    std::vector<value_t> data;
    int n;

  public:

    A(const int num):n(num) 
    {}
};

class B
{
  protected:
    A<float> position;

  public:
    B()  : position(256)
    {}
};