我想为struct的女巫构造函数和析构函数创建一个小例子,但是我的问题是我无法“打印” Zahlen [0],我也不知道为什么?
感谢任何帮助。
也许我必须使用指针参数打印它?
#include <iostream>
using namespace std;
struct IntList{
int *memory;
int size;
// Konstruktur
IntList(unsigned initialSize = 0) {
memory = new int[initialSize];// Speicher reservieren (0 erlaubt)
size = initialSize;
}
//Destruktor
~IntList() {
delete []memory; // Speicher freigeben
}
// Access Elemnts
int &operator[](unsigned index) {
if (index>=size) {throw std::out_of_range("out of bounds");}
return memory[index];
}
};
int main()
{
IntList *Numbers = new IntList(10);
Numbers[0] = 1;
cout << Numbers[0] << endl;
delete Numbers;
return 0;
}
答案 0 :(得分:5)
IntList *Numbers = new IntList(10);
Numbers[0] = 1;
cout << Numbers[0] << endl;
Numbers
的类型为指向IntList的指针。自远古以来,指针在C系列中就具有类似数组的语义,因此Numbers[0]
不是对IntList::operator[]
的调用,而仅仅是指针的第一个元素,即您在堆上分配的IntList
要么在堆栈上创建它:
IntList Numbers(10);
Numbers[0] = 1;
cout << Numbers[0] << endl;
// automatically destroyed on exiting scope
或者至少可以正确解决:
IntList *Numbers = new IntList(10);
(*Numbers)[0] = 1;
cout << (*Numbers)[0] << endl;
delete Numbers;
答案 1 :(得分:1)
这里的问题是您使Numbers
指向IntList
的指针。 IntList *Numbers = new IntList(10);
必须为IntList Numbers = IntList(10);
,以便您拥有IntList
对象,而不是指向该对象的指针。这将使您可以调用IntList::operator[]
而不是指针operator[]
的指针,指针仅给您Intlist
然后您还需要摆脱delete Numbers;
,因为Numbers
不再是指针。
答案 2 :(得分:0)
你想写
IntList Numbers(10);
Numbers[0] = 1;
cout << Numbers[0] << endl;
您的代码段问题
IntList *Numbers;
auto thisIsNotWhatYouThinkItIs = Numbers[0];
第二条语句返回IntList
,因为Numbers
是指向IntList
实例的指针。