myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [C++] Auf Globale Variable in anderer Datei zugreifen (https://mygully.com/showthread.php?t=3331395)

Show_Down 29.05.14 18:19

[C++] Auf Globale Variable in anderer Datei zugreifen
 
Hey, ich versuch euch mal möglichst einfach mein Problem zu schildern


main.cpp

Code:


//Globale Variable
Container container;
.
.
.
.
void createMedia(){
        Media* m_tmp = new Media;
        container.add(m_tmp);
.
.
.



medien.cpp

Code:

.
.
.
for (container.begin(); container.getitem() != NULL; container.next()){
                if(container.getitem()->get_signatur() == signatur){
                        cout << "Es existiert bereits ein Medium mit dieser Signatur" << endl;
                        cin.clear();
                        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                        cout << "Bitte Mediumdaten eingeben: Signatur und Titel\n\n";
                        cout << "Signatur: ";
                }
                container.next();
                cout << endl;
        }

.
.
.
.


(die fett geschriebenen Wörter unterstreicht der Compiler)

Der Compiler findet die Globale "Container container" Variable nicht aus der main Datei.
Die Header Dateien sind auch schon includiert. Wenn ich die Globale Variable aber in die Header-Datei packe meckert er er auch rum bzw. gibt mir dann noch mehr Fehler aus.

Berlin1992 30.05.14 18:06

Beim zweiten file schreib bei den globalen Variablen dazu:
extern Container container;

Show_Down 03.06.14 11:00

Danke an Berlin1992, seltsamer weis hab ich das mit dem extern schonmal probiert aber es hat nicht funktioniert, nach zwei tagen mach ich den selben versuch und siehe da es hat funktioniert.


Jetzt hätte ich aber noch eine andere frage:

Und zwar hab ich ja den Container in dem "Medien Angelegt werden mit einer Signatur (Zahlen) und einem Namen.
Wenn versucht wird ein neues Medium anzulegen mit einer Signatur die es schon gibt soll ein Fehler ausgegeben werden und dieses Neue medium nicht in der liste aufgeführt werden bzw. soft gelöscht werden.
Mittlerweile hab ich es soweit dass erkannt wird dass bereits ein Medium mit der gleichen Signatur existiert und den Fehler ausgibt, jedoch ist dann in der Liste/container eine leere stelle und als signatur steht dort ein zufälliger zahlen wert.

Was muss ich tun um zum oben beschriebenen Ergebnis zu kommen?



Hier mal der Konstruktor mit dem wesentlichen:

Code:

....

Media::Media(){

        cin.clear();
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
        cout << "Bitte Mediumdaten eingeben: Signatur und Titel\n\n";
        cout << "Signatur: ";

        while (!(cin >> signatur) && (cin.fail()) ){
                cin.clear();
                cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                cout << "Bitte Mediumdaten eingeben: Signatur und Titel\n\n";
                cout << "Signatur: ";
                cout << endl;
        }

        for (container.begin(); container.getitem() != NULL; container.next()){
                if(container.getitem()->get_signatur() == signatur){
                        Media* k_tmp = container.getitem();
                        delete k_tmp;
                        cout << "Es existiert bereits ein Medium mit dieser Signatur \n" << endl;
                        return;

                        }
                cout << endl;
                }


        cout << "Titel: ";
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
        getline(cin, titel );
        cout << endl;
};


....



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.