Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hey Leute,

hab mir ein Programm Adressbuch geschrieben, es hat auch alles funktioniert, aber als ich das Programm verbessern wollte und einige sachen aus dem main() teil in ein extra funtkionen schreiben wollte, hab ich irgendein fehler gemacht.

ich find ihn aber leider net, hoff ihr könnt mir helfen, es geht um das übergeben eines arrays mit zeigern auf mein objekt adresse.

main.cpp


#include "classAdressen.h"

#include <iostream>

#include <string>

using namespace std;


void auslesen(int& i, bool& right, Adressen* pZeiger[40]);

void einlesen(int& i, Adressen* pZeiger[40]);


int main()

{

    const int maxSize = 40;

    int choice;

    bool stop = false;

    bool stop2 = false;

    bool right = false;

    Adressen *pZeiger[maxSize];

    //string vorname;


    for (int i = 0; i < 40; i++)

    {

        marke:;

        cout << "Wollen sie eine Adresse speichern(1)oder nicht(2)?";

        cin >> choice;


        if (choice == 2)

            stop = true;

        else if( (choice != 2) && (choice != 1) )

        {

            cout << "Falsche Eingabe\n";

            goto marke;

        }



        while (stop == true)

        {

            marke2:;

            cout << "Wollen sie Adressen auslesen(1) oder beenden(2)?";

            cin >> choice;


            if (choice == 2)

            {

                stop2 = true;

                break;

            }

            else if( (choice != 2) && (choice != 1) )

            {

                cout << "Falsche Eingabe\n";

                goto marke2;

            }


            auslesen(i,right,pZeiger[maxSize]);

            /*cout << "Welche Adresse wollen sie auslesen(Vorname): ";

            cin >> vorname;


            for(int j = 0; j < i; j++)

            {

                right = false;

                if(pZeiger[j]->compareString(vorname))

                {

                    cout << pZeiger[j]->getVor_name() << "\n";

                    cout << pZeiger[j]->getNach_name() << "\n";

                    cout << pZeiger[j]->getAdresse() << "\n";

                    cout << pZeiger[j]->getTele() << "\n";

                    right = true;

                    break;

                }

            }

            if(!right)

                cout << "Keine Übereinstimmung!\n";*/


        }

        if (stop2 == true)

            break;


        einlesen(i,pZeiger[maxSize]);

        /*cout << "Geben sie den Vornamen ein: ";

        string vor_name;

        cin >> vor_name;


        cout << "Geben sie den Nachname ein: ";

        string nach_name;

        cin >> nach_name;


        cout << "Geben sie die Adresse ein: ";

        string adresse;

        cin.ignore();

        getline(cin,adresse);


        cout << "Geben sie die Telefonnummer ein: ";

        string tele;

        cin >> tele;


        pZeiger[i] = new Adressen();

        pZeiger[i]->setVor_name(vor_name);

        pZeiger[i]->setNach_name(nach_name);

        pZeiger[i]->setAdresse(adresse);

        pZeiger[i]->setTele(tele);*/

    }


}


void auslesen(int& i, bool& right, Adressen* pZeiger[40])

{

    string vorname;

    cout << "Welche Adresse wollen sie auslesen(Vorname): ";

    cin >> vorname;


    for(int j = 0; j < i; j++)

    {

        right = false;

        if(pZeiger[j]->compareString(vorname))

        {

            cout << pZeiger[j]->getVor_name() << "\n";

            cout << pZeiger[j]->getNach_name() << "\n";

            cout << pZeiger[j]->getAdresse() << "\n";

            cout << pZeiger[j]->getTele() << "\n";

            right = true;

            break;

        }

    }

    if(!right)

    cout << "Keine Übereinstimmung!\n";

}


void einlesen(int& i,Adressen* pZeiger[40])

{

    cout << "Geben sie den Vornamen ein: ";

    string vor_name;

    cin >> vor_name;


    cout << "Geben sie den Nachname ein: ";

    string nach_name;

    cin >> nach_name;


    cout << "Geben sie die Adresse ein: ";

    string adresse;

    cin.ignore();

    getline(cin,adresse);


    cout << "Geben sie die Telefonnummer ein: ";

    string tele;

    cin >> tele;


    pZeiger[i] = new Adressen();

    pZeiger[i]->setVor_name(vor_name);

    pZeiger[i]->setNach_name(nach_name);

    pZeiger[i]->setAdresse(adresse);

    pZeiger[i]->setTele(tele);

}

classAdressen.h

#include <string>


#ifndef CLASSADRESSEN_H_INCLUDED

#define CLASSADRESSEN_H_INCLUDED



class Adressen

{

    public:

        void setVor_name(std::string&);

        void setNach_name(std::string&);

        void setAdresse(std::string&);

        void setTele(std::string&);

        std::string getVor_name()const{return itsVor_name;}

        std::string getNach_name()const{return itsNach_name;}

        std::string getAdresse()const{return itsAdresse;}

        std::string getTele()const{return itsTele;}

        bool compareString(std::string&)const;


    private:

        std::string itsVor_name;

        std::string itsNach_name;

        std::string itsAdresse;

        std::string itsTele;

};


#endif // CLASSADRESSEN_H_INCLUDED


classAdressen.cpp

#include "classAdressen.h"

#include <iostream>

#include <string>


using namespace std;


void Adressen::setVor_name(string &vor_name)

{

    itsVor_name=vor_name;

}


void Adressen::setNach_name(string &nach_name)

{

    itsNach_name=nach_name;

}


void Adressen::setAdresse(string &adresse)

{

    itsAdresse=adresse;

}


void Adressen::setTele(string &tele)

{

    itsTele=tele;

}

bool Adressen::compareString(string &temp)const

{

    if(itsVor_name==temp)

        return true;

}


Der compiler meldet für zeile 51 in main.cpp can no convert adressen* to adressen** for argument 3 of void auslesen....

und das gleiche für zeile 75 und der funtkion einlesen....

danke schonmal

Geschrieben
auslesen(i,right,pZeiger[maxSize]);

einlesen(i,pZeiger[maxSize]);

Lass das [maxSize] hier weg, es bewirkt nicht das, was du glaubst.

Machen wir ein kleines Spiel:

Was ist pZeiger[0]? Antwort: Das erste Element des Arrays pZeiger.

Was ist pZeiger[1]? Antwort: Das zweite Element des Arrays pZeiger.

Was ist pZeiger[maxSize]? Antwort: Das maxSize+1.te Element des Arrays pZeiger.

Erstens hat dein Array gar nicht so viele Elemente, und zweitens willst du sicher nicht nur ein einzelnes Element übergeben, oder?

Mir ist klar, dass du hier versuchst, eine Größenangabe mitzuliefern, aber das funktioniert so nicht. Überhaupt geht bei Arrays die Größeninformation verloren, wenn man sie als Funktionsparameter benutzt. In der Funktion kommt nur ein Zeiger auf das erste Element an.

Die folgenden Funktionsdeklarationen sind also absolut gleichwertig:

void einlesen(int& i, Adressen* pZeiger[40]);
void einlesen(int& i, Adressen* pZeiger[]);
void einlesen(int& i, Adressen** pZeiger);[/code]

Wenn du diesen Funktionen eine Größenangabe mitgeben willst, musst du dafür einen zusätzlichen Parameter einführen.

Mittelfristig solltest du versuchen, von eigener Speicherverwaltung wegzukommen und statt dessen die Container der Standardbibliothek zu benutzen. Das macht vieles einfacher und verringert die Gefahr von Speicherlecks und Pufferüberläufen.

Geschrieben

ok werds gleich mal probieren zu ändern. danke schonmal

ja ich weiß;-) deswegen hat ich das eg auch schon anderster gelöst, aber hab wohl vergessen dass zu speichern:D

meld mich nochmal nachher obs geklappt hat;-) danke schonmal:-P

Geschrieben

Sooo also habs probiert und es geht=)

War ja mal ein sau dummer Fehler, man hört immer wieder und weiß eg au arrays fangen bei 0 an und der name ist ein zeiger auf das erste element des arrays und trotzdem macht man den fehler selber auch:D;-)

vielleicht könnt ihr mir auch in meinem thread debuggen helfen=) wär toll

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...