Problem mit linearer LISTE

Konstantin

Grünschnabel
Ich habe da folgendes Problem!:

In meinem Projekt werden lineare Listen benutz. Da es aber Probleme gab habe ich dieses kleine Progrämchen geschrieben um den Fehler zu analysieren.

Das Problem ist, das die Integer Variablen wie geplant ausgegeben werden, die char* aber nicht! Bei dieser ausgabe gibt das Programm jedesmal das gleiche zurück!

Hab keine ahnung wo sich da der Fehler befindet!

Hoffe das ener von euch mir da auf die Sprünge helfen kann


#include<stdio.h>
#include<conio.h>
#include<iostream.h>


class Liste{
protected:
int Alter;
char* Wort;

public:
Liste *next;
Liste *fext;
void wuff(int,char*);
int miau();
};



void Liste::wuff(int nAlter, char* nWort){
Alter = nAlter;
//Wort = new char*(stlen[nWort]+1);
Wort = nWort;

}

int Liste::miau(){
cout<<Wort;
return Alter;
}

void main (void)
{
int anzahl,i,k;
char* Eingelesen;

Liste *p,*q, *start;
start = new Liste;
start->next=NULL;
start->wuff(1,"Hallo");
p = start;
q = start;
cout<<"Wie viele\n";
cin>>anzahl;
for(i = 1;i <= anzahl;i++)
{
p = new Liste;
cout<<"Zahlen\n";
cin>>k;
cout<<"String\n";
cin>>Eingelesen;
p->wuff(k,Eingelesen);
q->next=p;
p->fext=q;
q->next->next=NULL;
q=p;
}
p=start;
for(i = 1;i <= anzahl;i++)
{
p=p->next;
cout<<p->miau()<<endl;
}
for(i = 1;i <= anzahl;i++)
{
cout<<p->miau()<<endl;
p=p->fext;
}
getch();

delete p ;
delete q ;
delete start;

}
 
Code:
char* Eingelesen;
Du stellst überhaupt keinen Platz zum Speichern der Eingabe zur Verfügung. Mach das vielleicht besser so:
Code:
char Eingelesen[500];

Und ausserdem:
 

Anhänge

  • codetags.gif
    codetags.gif
    7,1 KB · Aufrufe: 37
So besser?


Hab den Fehler gefunden


Code:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>


class Liste{
protected:
int Alter;
char* Wort;

public:
Liste *next;
Liste *fext;
void wuff(int,char*);
int miau();
};

void Liste::wuff(int nAlter, char* nWort){
Alter = nAlter;  
Wort = new char[strlen(nWort)+1];    
Wort = nWort;     // Hier liegt der Fehler   Muss strcpy(Wort ,nWort ); heisen
}

int Liste::miau(){
cout<<Wort;
return Alter;
}

void main (void)
{
int anzahl,i,k;
char* Eingelesen;   // Du hast hier gemeint, oder?  Ist aber so schon Richtig!

Liste *p,*q, *start;
start = new Liste;
start->next=NULL;
start->wuff(1,"Hallo");
p = start;
q = start;
cout<<"Wie viele\n";
cin>>anzahl;
for(i = 1;i <= anzahl;i++)
{
p = new Liste;
cout<<"Zahlen\n";
cin>>k;
cout<<"String\n";
cin>>Eingelesen;
p->wuff(k,Eingelesen);
q->next=p;
p->fext=q;
q->next->next=NULL;
q=p;
}
p=start;
for(i = 1;i <= anzahl;i++)
{
p=p->next;
cout<<p->miau()<<endl;
}
for(i = 1;i <= anzahl;i++)
{
cout<<p->miau()<<endl;
p=p->fext;
}
getch();

delete p ;
delete q ;
delete start;

}

Jetz gehts :-)

Konstantin
 
Zuletzt bearbeitet:
void Liste::wuff(int nAlter, char* nWort){
Alter = nAlter;
Wort = new char[strlen(nWort)+1];
Wort = nWort;
}

Das geht nicht! Du kopierst nicht den Inhalt des String nWort nach Wort, sondern nur den Zeiger.

Du musst mit strcpy(..) den Inhalt kopieren, so:

void Liste::wuff(int nAlter, char* nWort){
Alter = nAlter;
Wort = new char[strlen(nWort)+1];
strcpy(Wort, nWort);
}

ABER:
a) Warum erfindest Du das Rad neu? In der STL gibt es massig Listen
b) Ich rate drigend von C-Strings ab, nimm in jedem Fall eine String-Klasse (z.b. auch aus der STL)

und weiter:
Warum hat Deine Klasse List auch die Attribute eines Listenelements. Du solltest klar trennen zwischen Element und Liste. Etwa so:

class List
{

class Element
{
int alter;
char* wort;

Element* nextEle;
Element* prevEle;
};

Element* firstElement;
Element* lastElement;

};
 
Zurück