Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Adressbuch

Empfohlene Antworten

Veröffentlicht

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

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.

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.