1

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

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) 中出现以下错误

IntelliSense:需要一个类型说明符

任何想法?

4

2 回答 2

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)
    //    ^^^^^^^^^^^^^
    {}
};
于 2013-09-15T15:53:24.980 回答
2

您需要将参数传递给所属类的构造函数中的成员构造函数。因此,在您的情况下,您需要在 B 的构造函数中将值传递256给您的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)
    {}
};
于 2013-09-15T15:52:16.410 回答