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);
    };
}
#endifCode: 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



