gpt4 book ai didi

C++ 参数化构造函数错误

转载 作者:行者123 更新时间:2023-11-28 00:20:58 24 4
gpt4 key购买 nike

我正在编写代码,使用参数化构造函数创建一个简单的 C++ 类。我的代码如下:

#include <iostream>
using namespace std;

class CC{
public:
double h[];
double t[];
int tsize;

CC(double rs[], double ts[], int l){
for (int k = 0;k < l;k++){
t[k] = ts[k];
h[k] = rs[k];
};
tsize = l;
};
};

int main(int argc, char const *argv[])
{
double r[] = {1,4,9};
double tm[] = {1,2,3};
int s = 3;
CC CC1(r,tm,s);
cout<<CC1.h[0]<<CC1.h[1]<<CC1.h[2]<<endl;
cout<<CC1.t[0]<<CC1.t[1]<<CC1.t[2]<<endl;
};

它给我的输出是:

149
149

本应如此

149
123

有人可以告诉我我在这里做错了什么吗?

最佳答案

在类定义中,double h[]; 是一个错误。您必须将数组的边界指定为类定义的一部分,例如:

double h[5];

然后在您的构造函数中检查您是否没有收到 l > 5。 (顺便说一句,不要使用 l 作为变量名,它看起来太像 1)。您的编译器应该对此给出错误。

如果您在编译时不知道您的数组有多大,那么您就不能使用 C 风格的数组。而是使用 C++ 风格的数组;这些被称为 vector :

vector<double> h, t;

由于可以通过传递一对绑定(bind)初始数据的指针来初始化 vector ,因此您可以这样编写构造函数:

CC(double rs[], double ts[], int length)
: h(rs, rs+length), t(ts, ts+length), tsize(length)
{ }

好处:如果您传递的是实际数组(而不是指针),则可以从您传入的数组中推断出长度:

template<size_t length>
CC(double (&rs)[length], double (&ts)[length])
: h(rs, rs+length), t(ts, ts+length), tsize(length)
{ }

用法:

CC cc1(r, tm);

您可以使用此构造函数来代替或补充其他构造函数。

关于C++ 参数化构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27540418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com