c ++用新的 class 初始化二维向量;默认值更改
c++ initialize 2d vector with a new class ; default value change
我想初始化一个二维向量,但我一直收到错误消息
如果我写这段代码
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 土壤
class Soil
{
public:
Soil();
double A;
double B;
double C;
double D;
};
#endif // SOIL_H
我该怎么办?
您的代码无效,因为 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
元素作为第二个参数传递。在你的 class 中,你应该定义一个构造函数来负责用所需的值初始化字段。或者您应该消除无参数构造函数并选择 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
我想初始化一个二维向量,但我一直收到错误消息
如果我写这段代码
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 土壤
class Soil
{
public:
Soil();
double A;
double B;
double C;
double D;
};
#endif // SOIL_H
我该怎么办?
您的代码无效,因为 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
元素作为第二个参数传递。在你的 class 中,你应该定义一个构造函数来负责用所需的值初始化字段。或者您应该消除无参数构造函数并选择 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