c ++用一个新的类初始化2d向量;默认值更改

时间:2019-09-05 12:41:57

标签: c++ class vector 2d default

我想初始化一个2d向量,但我不断收到错误消息

如果我编写此代码

unsigned long size = 101;
double initialmPo = 63;

std::vector<std::vector<Soil> > matrixPotential(
              size, std::vector<Soil>(size));

我没问题 但是如果我编写这段代码

    std::vector<std::vector<Soil> > matrixPotential(
              size, std::vector<Soil>(size, initialmPo));

我收到消息

no matching constructor for initialization of  std::vector< Soil >

我想要一个101 * 101的向量,向量的内部是63的值(数字)。

那是我的土壤

class Soil
{
public:
    Soil();
    double A;
    double B;
    double C;
    double D;
};

#endif // SOIL_H

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为initialmPo不是有效的Soil实例。您需要的std::vector中的constructor

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

         vector( size_type count,    
                 const T& value,
                 const Allocator& alloc = Allocator());     (since C++11)

为此,您应该传递所需的Soil元素作为第二个参数。在您的类中,应该定义一个构造函数,该构造函数负责使用所需的值初始化字段。或者,您应该消除无参数构造函数,并选择aggregate initialization

示例(带有构造函数)

#include <vector>

class Soil
{
public:
    double A;
    double B;
    double C;
    double D;
    Soil(double in) : A{in}, B{in}, C{in}, D{in} { }
};


int main()
{
  unsigned long size = 101;
  double initialmPo = 63;
  Soil s(initialmPo);
  std::vector<std::vector<Soil> > matrixPotential(
              size, std::vector<Soil>(size, s));

  return 0;
}

查看live

示例(带有聚合初始化)

#include <vector>

class Soil
{
public:
    double A;
    double B;
    double C;
    double D;
};


int main()
{
  unsigned long size = 101;
  double initialmPo = 63;
  Soil s{initialmPo, initialmPo, initialmPo, initialmPo};
  std::vector<std::vector<Soil> > matrixPotential(
              size, std::vector<Soil>(size, s));

  return 0;
}

查看live