Folgender Code gibt eine Compilerfehlermeldung zurück:
arch.h:
Code: Alles auswählen
#ifndef sorting_arch
#define sorting_arch
namespace arch{
int menu(void);
int newEntry(void);
class Collection
{
public:
class CD
{
public:
int length; // Länge der CD in Sekunden
char title[30]; // Titel der CD, weniger als 30 Zeichen!
};
CD *collection;
unsigned int elements;
~Collection(void);
int createNewCD(char title[30], int length);
int showLengst(void);
int getLengst(void);
int getList(void);
};
}
#endif
Code: Alles auswählen
#include "arch.h"
#include "style.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace Style;
namespace arch{
int menu()
{
clrscr();
home();
//setBold();
std::cout << "Ermitteln Sie die Längste Ihrer CDs - Hauptmenü";
//UnsetAllAttributes();
gotoxy(3,4);
std::cout << "Zur Navigation geben Sie eine der folgenden Buchstaben ein, "<<
"und bestätigen Sie mit ENTER";
gotoxy(4,8);
std::cout << "N - Neue CDs eintragen";
gotoxy(4,10);
std::cout << "E - Vorhandene CDs verändern";
gotoxy(4,12);
std::cout << "A - Anzeigen aller CDs einschließlich Länge";
gotoxy(4,14);
std::cout << "L - Anzeigen der längsten CD";
gotoxy(4,16);
std::cout << "B - Programm beenden";
gotoxy(2,20);
std::cin.clear();
char eingabe=getchar();
if (eingabe=='n' || eingabe=='N') { return 1; }
else if (eingabe=='e' || eingabe=='E') { return 2; }
else if (eingabe=='a' || eingabe=='A') { return 3; }
else if (eingabe=='l' || eingabe=='L') { return 4; }
else if (eingabe=='b' || eingabe=='B') { return 5; }
else { return 0; }
}
int Collection::showLengst()
{
if (elements==0)
{
return 6;
}
int lengst=getLengst();
clrscr();
home();
std::cout << "Ihre Längste CD:";
gotoxy(3,4);
std::cout << collection[lengst].title << "| Länge: " << collection[lengst].length;
gotoxy(3,6);
std::cout << "Drücken Sie einen Knopf um zum Menü zurückzukehren.";
gotoxy(3,9);
std::cin.clear();
getchar();
return 0;
}
Collection::~Collection()
{
int i=0;
while (i<elements)
{
delete [] *collection;
i++;
}
}
int Collection::createNewCD(char title[30], int length)
{
collection[elements]=new CD;
strncpy(title, collection[elements].title, 30);
collection[elements].length=length;
elements++;
}
int Collection::getLengst()
{
int lengstElement[elements];
int i=0; int tmp;
while (i<elements)
{
lengstElement[i]=i;
i++;
}
bool thru=false; i=0;
while (thru==false)
{
if (collection[i].length<collection[i+1].length)
{
lengstElement[i]=i+1;
lengstElement[i+1]=i;
i=0;
}
if (i>=elements)
{
thru=true;
}
i++;
}
return lengstElement[0];
}
}
Wie also muss ich hier delete verwenden (vllt. kann mir jmd. allgemein erklären wie delete zu verwenden ist, ich schau mir auf die Seite im Wiki nochmal anarch.cpp: In destructor ‘arch::Collection::~Collection()’:
arch.cpp:73: error: type ‘class arch::Collection::CD’ argument given to ‘delete’, expected pointer
arch.cpp: In member function ‘int arch::Collection::createNewCD(char*, int)’:
arch.cpp:80: error: no match for ‘operator=’ in ‘*(((arch::Collection*)this)->arch::Collection::collection + ((unsigned int)(((arch::Collection*)this)->arch::Collection::elements * 36u))) = (arch::Collection::CD*)operator new(36u)’
arch.h:12: note: candidates are: arch::Collection::CD& arch::Collection::CD::operator=(const arch::Collection::CD&)

Warum kann ich collection nicht mit 'new CD;' erweitern?
Vielen Dank im Voraus für eure Hilfe.
MfG Naums