C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Problem mit Array

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Michael Weber
Guest





PostPosted: Wed Jun 01, 2005 8:06 pm    Post subject: Problem mit Array Reply with quote



Hallo NG,

ich möchte gern ein Array zurückgeben, leider macht der das nicht
vielleicht,
hast jemand eine Idee, wie ich das machen kann?

Anbei mein Code, etwas weiter unten, weil ich nicht genau weiß ob ich mir
vielleicht vorher schon was verbaut hab. Bin noch nicht sehr erfahren mit
Cpp, bitte seht mir daher die sicherlich enthaltenen Schwächen nach.

es geht um die Funktion getArray;

<
void getArray(string array[5][14])
{
//return array;
};

halt statt void, vom typ eines Arrays

Viele Grüße

Michael


______________________________________________________________
//Stand:01.06.2005
#include <math.h>
#include <string.h>
class KONTAKT
{
private:
string name;
string vorname;
string strasse;
string ort;
string telefonnummer;
string email;
string hausnummer;
string plz;
string termin;
string array[5][14];
friend class TERMIN;

public:
void Feld_Init(int);
void getArray(string array[5][14])
{
//return array;
};

};

/* void KONTAKT::Feld_Init()
{
cout< cin>> name;
array[i][0]=name;

cout< cin>> vorname;

cout< cin>> strasse;

cout< cin>> hausnummer;

cout< cin>> plz;


cout< cin>> ort;

cout< cin>> telefonnummer;

cout< cin>>email;

//cout< //getchar();
};*/
void KONTAKT::Feld_Init(int i)
{
cout< cin>> name;
array[i][0]=name;

cout< cin>> vorname;
array[i][1]=vorname;

cout< cin>> strasse;
array[i][2]=strasse;

cout< cin>> hausnummer;
array[i][3]=hausnummer;

cout< cin>> plz;
array[i][4]=plz;


cout< cin>> ort;
array[i][5]=ort;

cout< cin>> telefonnummer;
array[i][6]=telefonnummer;

cout< cin>>email;
array[i][7]=email;

};


class Dienstkontakt: public KONTAKT
{
private:
string name_Unternehmen;
string art_Unternehmen;

public:
void Feld_Init_dienst();
};

/*void Dienstkontakt::Feld_Init_dienst()
{
KONTAKT::Feld_Init();
cout< cin>> name_Unternehmen;
cout< cin>> art_Unternehmen;

//cout< //getchar();
};*/

void Dienstkontakt::Feld_Init_dienst()
{
int i;
KONTAKT *kontakt1;
(*kontakt1).Feld_Init(i);
};


class Privatkontakt: public KONTAKT
{
private:
string geburtsdatum;
string geschlecht;
string hobbie_1;
string hobbie_2;
string hobbie_3;
string hobbie_4;
string hobbie_5;

public:
void Feld_Init_privat();
void Einlesen_hobbies();
};

void Privatkontakt::Feld_Init_privat()
{
int i;
int hobby;
char e_hobby[5];
KONTAKT::Feld_Init(i);
cout< cin>> geburtsdatum;
cout< cin>> geschlecht;

do
{
cout << "Moechten Sie ein Hobby oder Interessen eingeben [1=ja,2=nein]?";
cin>> e_hobby;
hobby=atoi(e_hobby);
if(hobby != 2 && hobby !=1)
{
hobby=0;
};

}while(hobby==0);

cout<
int falsch=0;

do
{
switch (hobby)
{
case 1:
Einlesen_hobbies();
falsch=1;
break;
case 2:
falsch=1;
break;
default:
cout << "Ich konnte Ihre Eingabe leider nicht verarbeiten.";
break;
};
}while (falsch !=1);
//getchar();
};

void Privatkontakt::Einlesen_hobbies()
{
int hobbie;
do
{
char e_hobbie[5];

cout<<"Bitte geben Sie das Hobbie oder Interesse ein:";
cin >> hobbie_1;
cout <<"Wollen Sie ein weiteres Hobbie eingeben [1=ja, 2=nein]?";
cin>> e_hobbie;

hobbie=atoi(e_hobbie);//61
if(hobbie != 2 && hobbie !=1)
{
hobbie=0;
};
}while(hobbie == 0);

if (hobbie==1)
{
do
{
char e_hobbie[5];

cout<<"Bitte geben Sie das Hobbie oder Interesse ein:";
cin >> hobbie_2;
cout <<"Wollen Sie ein weiteres Hobbie eingeben [1=ja, 2=nein]?";
cin>> e_hobbie;

hobbie=atoi(e_hobbie);
if(hobbie != 2 && hobbie !=1)
{
hobbie=0;
};
}while(hobbie == 0);

if (hobbie ==1)
{
do
{
char e_hobbie[5];

cout<<"Bitte geben Sie das Hobbie oder Interesse ein:";
cin >> hobbie_3;
cout <<"Wollen Sie ein weiteres Hobbie eingeben [1=ja, 2=nein]?";
cin>> e_hobbie;

hobbie=atoi(e_hobbie);
if(hobbie != 2 && hobbie !=1)
{
hobbie=0;
};
}while(hobbie == 0);

if (hobbie ==1)
{
do
{
char e_hobbie[5];

cout<<"Bitte geben Sie das Hobbie oder Interesse ein:";
cin >> hobbie_4;
cout <<"Wollen Sie ein weiteres Hobbie eingeben [1=ja, 2=nein]?";
cin>> e_hobbie;

hobbie=atoi(e_hobbie);
if(hobbie != 2 && hobbie !=1)
{
hobbie=0;
};
}while(hobbie == 0);

if (hobbie ==1)
{
cout<<"Bitte geben Sie das Hobbie oder Interesse ein:";
cin>> hobbie_5;
};

};
};
};
};
______________________________________________________________

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Thorsten Nitz
Guest





PostPosted: Thu Jun 02, 2005 11:54 am    Post subject: Re: Problem mit Array Reply with quote



Michael Weber schrieb:

Quote:
ich möchte gern ein Array zurückgeben,

Geht nicht.

Quote:
leider macht der das nicht
vielleicht,
hast jemand eine Idee, wie ich das machen kann?

In der Reihenfolge zunehmender Hässlichkeit:
1. std::vector benutzen
2. Array in struct verpacken
3. Mit Zeiger arbeiten.

Letzteres ist ein Minenfeld, also erst versuchen, wenn Du Zeiger und
Arrays wirklich verstanden hast.

Quote:
es geht um die Funktion getArray;

kontakt.h
void getArray(string array[5][14])
{
//return array;
};

Warum Du hier das Feld an das Programm zurückgeben willst, das
ebendieses Feld selbst übergeben hat, ist nicht unmittelbar
einleuchtend. Bei einer Get-Methode erwarte ich etwa

std::vector<std::string> MyClass::getArray() const
{
return array;
}

D.h. ohne Parameter und const.


Quote:
#include <string.h

Dieser Header enthält Funktionen im C-Stil, die nullzeichenterminierte
char-Arrays manipulieren. Er enthält _keine_ Klasse namens "string".

Daneben gibt es den Header std::string enthält.


Quote:
class KONTAKT
Bezeichner komplett in Großbuchstaben sollte man für Präprozessormakros

reservieren, dann erlebt man weniger Überraschungen, wenn man mal einen
Bezeichner aus Versehen doppelt verwendet.

Quote:
{
private:
string name;
Hier sollte der Compiler schon meckern, da die Klasse "string" nicht

definiert ist.

Quote:
string vorname;
string strasse;
string ort;
string telefonnummer;
string email;
string hausnummer;
string plz;
string termin;

Diese Variablen benutzt Du im Folgenden als temporäre, lokale Variablen.
Sie gehören deshalb nicht in die Klasse, sondern in die jeweilige Methode.


Quote:
string array[5][14];
Du möchtest 14 Datensätze mit jeweils 5 Feldern abspeichern (wobei Du 9

Merkmale einliest?), entnehme ich dem nachfolgenden Code. Da macht man
für die Datensätze einen Typ, z.B.
struct Kontakt {
std::string name;
std::string vorname;
std::string strasse;
std::string ort;
std::string telefonnummer;
std::string email;
std::string hausnummer;
std::string plz;
std::string termin;
}

und legt in der Klasse, die alle Datensätze verwaltet, einen Container an:

class Kontakverzeichnis {
std::vector<Kontakt*> array; // Wir brauchen Zeiger, um später
// Unterklassen von Kontakt verwalten
// zu können
public:
void InitField() {
// alle Felder eingeben
Kontakt* neuerKontakt = new Kontakt;
std::cout << "Name: n";
std::cin >> neuerKontakt->name;
// usw.

// Datensatz abspeichern
array.push_back(neuerKontakt);
}

// Kontakt zu Nummer
Kontakt getKontakt(int index) const {
return array[index]; // Achtung, keine Feldgrenzenprüfung
}

// Und weil wir mit Zeigern arbeiten, brauchen wir einen Destruktor
~Kontaktverzeichnis() {
for (std::vector<Kontakt*>::iterator i = array.begin();
i != array.end();
++i)
delete (*i); // Kontakt zerstören
}
};

Soweit ein paar Gedanken, die mir beim Überfliegen Deine Codes gekommen
sind.

Tschö, wa!
Thorsten

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Jörg Barfurth
Guest





PostPosted: Sun Jun 05, 2005 10:19 pm    Post subject: Re: Problem mit Array Reply with quote



Hi,

Michael Weber wrote:

Quote:
ich möchte gern ein Array zurückgeben, leider macht der das nicht

Wer ist der? Ich nehme mal an hier feht 'Compiler' (oder etwas ähnliches)?!

Quote:
vielleicht,
hast jemand eine Idee, wie ich das machen kann?


Es kommt darauf an wozu du das willst.

Quote:
Anbei mein Code, etwas weiter unten, weil ich nicht genau weiß ob ich mir
vielleicht vorher schon was verbaut hab. Bin noch nicht sehr erfahren mit
Cpp, bitte seht mir daher die sicherlich enthaltenen Schwächen nach.


Vermutlich ist schon die Verwendung eines solchen Arrays ein Fehler.
Zumal du für die Feldgrößen unbenannte 'magische' Konstanten verwendest
und der Membervariablen den nichtssagenden Namen 'array' gegeben hast.


Quote:
es geht um die Funktion getArray;

kontakt.h
void getArray(string array[5][14])
{
//return array;
};

halt statt void, vom typ eines Arrays


Deiner Anfrage am nächsten kommst du, wenn du eine Referenz auf das
Array zurückgibst:

Da es die Kapselung verletzt eine veränderbare Referenz zurückzugeben,
willst du evtl sowas:

const string (& KONTAKT::getArray() const)[5][14]
{
return array;
}

Aber Achtung: Die Referenz bleibt nur solange gültig, wie das
KONTAKT-Objekt existiert.

Vernünftiger Code enthält aber solche wilden Konstrukte nicht. Wenn es
um Zugriff auf die Feldelemente geht, solltest du eher sowas verwenden:

string KONTAKT::getArrayElement(std::size_t i, std::size_t j) const
{
// hier noch die Gültigkeit von i und j prüfen
return array[i][j];
}

Aber wie zuvor gesagt: Eigentlich denke ich das schon die Verwendung
eines Arrays das Problem (der Fehler) ist.

Quote:
______________________________________________________________
//Stand:01.06.2005
#include #include class KONTAKT
{
private:
string name;
string vorname;
string strasse;
string ort;
string telefonnummer;
string email;
string hausnummer;
string plz;
string termin;
string array[5][14];
friend class TERMIN;

public:
void Feld_Init(int);
void getArray(string array[5][14])
{
//return array;
};

};

[SNIP, jede Menge ungelesenen Code]

Bitte reduziere Codebeispiele vor dem Posten auf den für die Frage
relevanten Anteil. Das spart allen hier Zeit und Ärger.

Gruß Jörg

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.