Итак, я студент, и у меня есть простое домашнее задание об основах C ++. До сих пор все работало нормально, но теперь у меня есть проблема, которую я не могу решить.
Классы, которые я написал, должны быть проверены основным методом, предоставленным профессором. Проблема в том, что он создает указатель на объект, затем удаляет указатель, но затем хочет напечатать объект. По какой-то причине это не работает с кодом, который я написал.
Возможно, я недостаточно разбирался в указателях, я узнал их на этом сайте: https://www.tutorialspoint.com/cplusplus/cpp_pointers.htm
Я думаю, что часть моегоПроблема также в методе «Добавить» (вы поймете, что я имею в виду). Глава этого метода дается профессором. Если я правильно понял, & args означает, что возвращает адрес.
Заранее извините, что мой код написан на немецком языке, но это не должно влиять на то, что вы, ребята, можете его понять. Также заранее извините, если я пропустил важные детали или не написал достаточно подробно, в чем заключается моя проблема или достаточно моего кода.
Любая помощь очень ценится!
Я действительно не знаючто делать, чтобы решить проблему.
-------------- Это код, предоставленный профессором -----------------
Мне не разрешено редактировать это
int main(){
Class1 Object1List[2];
Class2 Object2.1= Class2(std::string("),...); //all further parameters are strings
Class2* Object2.2= new Class2(std:string(""),...);
Class3 Object3.1 = Class3(std::string(""),...);
Class3* Object3.2 = new Class3 (std::string(""),...);
Object1List[0]=new Class1(Object3.1);
Object1List[0]->Add(Object2.1);
Object1List[0]->Add(*Object2.2);
Object1List[1]=new Class1(Object3.2);
Object1List[1]->Add(Object2.1);
Object1List[1]->Add(*Object2.2);
delete Object2.2;
delete Object3.2;
//for loop to print and afterwards delete both elements in Object1List
}
--------Class1--------------------------------
class Class1 {
static const int maxEntries = 10;
int m_numEntries=0;
Class2 m_Class2;
Class3* m_pList[maxEntries];
public:
Class1(Class2& objClass2);
~Class1();
void Add(Class3& arg);
void Print()const;
}
//cpp
//constructor
this->m_Zeitschrift = zeitschrift;
//deconstructor sets all elements in the list to a nullptr
void Class1::Add(Class2& args){
if(currentNumberOfEntries <=maxNumberOfEntries){
currentNumberOfEntries++;
class3List[currentNumberOfEntries] = &arg;
}
}
//print
void Class1::Print(){
std::cout << "Class2: " << std::endl;
m_Class2.Print();
std::cout << "Class3list: " << std::endl;
for (int i = 0; i < m_numEntries;i++) {
m_pList[i]->Print();
}
}
Я ожидаю, что метод print "просто" запишет вещи в список. Вместо этого он говорит мне, что не может печатать, вместо этого он говорит следующее (перевод с немецкого):
Брошенное исключение: «доступ для чтения (запрещено / ранен / ранен / не разрешен)» (lesezugriffsverletzung) std :: _ String_alloc>> :: _ Get_data (...) вернул 0xCDCDCDE9.