所以我不得不用一个Point类创建一个程序,它需要多少维度然后我在类中做了一个带有如此多坐标的funktion,并且这样做我必须创建一个动态数组,因为尺寸不固定。
class Punkt
{
private:
char n;
int d;
double* k = new double[d];
public:
Punkt(int);
void Name(char);
void Initialisieren();
~Punkt();
};
这是定义这些功能的地方:
Punkt::Punkt(int dimension)
{
d = dimension;
}
void Punkt::Name(char name)
{
n = name;
}
void Punkt::Initialisieren()
{
for (int i = 0; i < d; i++) {
cout << "Geben sie bitte die " << i + 1 << ". Koordinate von " << n << " ein: ";
cin >> k[i];
cout << endl;
}
}
Punkt::~Punkt()
{
cout << "Destrukt: " << n << endl;
delete[] k;
}
启动程序时,我收到了Destrukt: B
的消息,但Destrukt: A
丢失了(我首先声明A然后是B)然后它给了我错误。它也没有做任何我告诉它与我做的其他功能但没有列出它们的couts。有人可以帮帮我吗?我知道它已被问过这么多次,但大多数人都有问题bcs制作了一系列字符而忘记了最后一个包含零的地方。
P.S。该程序是用德语编写的,如果应该更改,请告诉我,因为我是本节的新手。
答案 0 :(得分:5)
请注意,您在类定义中包含以下内容:
int d;
double* k = new double[d];
这将在构造函数运行到大小为d的新数组之前初始化k。问题是d尚未被初始化,因为构造函数尚未运行。要解决此问题,请将初始化移动到构造函数中。
您还需要一个复制构造函数和赋值运算符,以及可选的移动构造函数和移动赋值运算符。如果您还没有听说过这些条款,请在线快速进行Google搜索。