c++ 用新类初始化二维向量;默认值更改
Posted
技术标签:
【中文标题】c++ 用新类初始化二维向量;默认值更改【英文标题】:c++ initialize 2d vector with a new class ; default value change 【发布时间】:2019-09-05 12:41:57 【问题描述】:我想初始化一个二维向量,但我不断收到错误消息
如果我写这段代码
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
我该怎么办?
【问题讨论】:
请通过添加所需的#include
s 和主函数来提供minimal reproducible example。
在重载模板函数中进行选择时(在这种情况下,vector<Soil>
的构造函数编译器不会查看转换。没有构造函数将 double
作为其第二个参数。要么更改initialmPo
的类型为 int
或在您的代码中将其转换为 int
。
Works for me.
【参考方案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) : Ain, Bin, Cin, Din
;
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 sinitialmPo, initialmPo, initialmPo, initialmPo;
std::vector<std::vector<Soil> > matrixPotential(
size, std::vector<Soil>(size, s));
return 0;
看live
【讨论】:
你能重现他的问题吗?我不能。那你怎么能提供答案呢? @MarekR 问题出在问题的第二个示例中,does not compile 好的,现在我看到了问题:) 谢谢。 在第二个示例中,Soil sinitialmPo, initialmPo, initialmPo, initialmPo;
再次出现错误,没有匹配的构造函数用于初始化土壤
但是从第一个例子中,我没有看到任何错误!!!太感谢了!也感谢您的好意和良好的解释!谢谢你:)以上是关于c++ 用新类初始化二维向量;默认值更改的主要内容,如果未能解决你的问题,请参考以下文章