Zwei werte ausgeben



  • Schreib in beide Datein am besten noch

    #include <iostream>
    

    Das dürfte dein Problem lösen!!!



  • Habe die my.h nach stdafx.h geschrieben und jetzt ist die Warnung weg. Mit dem #include <iostream> werde ich noch hinschreiben. Aber jetzt mal eine Frage was bedeutet das : Beachten Sie, dass use.cpp nicht die Headerdatei std_lib_facilities.h einbindet, da sie ihre Elemente direkt verwendet?



  • Ich glaube, das heißt, dass die Datei schon eingebunden ist!



  • Kleiner Tipp:

    Poste mal alle dateien, damit wir dir folgen können. Aber kürz den unwichtigen Inhalt mit

    /*  Hier der Restliche Code  */
    

    weg. Hier gehts in ersterline um die includes. Die sind wichtig!



  • Das ist my.h:

    extern int foo;
    void print_foo();
    void print(int);
    

    Das sind die includes der my.cpp:

    #include "stdafx.h"
    #include "my.h"
    #include "std_lib_facilities.h"
    // und der code
    void print_foo(){
    	cout << foo << '\n';
    }
    
    void print(int i){
        cout << i << '\n';
    }
    

    Und das der use.cpp:

    #include "stdafx.h"
    #include "my.h"
    // und der code
    int main()
    {
        foo = 7;
    	print_foo();
    	print(99);
    	char cc;
    	cin >> cc;
    	keep_window_open();
        return 0;
    }
    

    Das ist alles wo mit ich arbeite.



  • Ich glaube du kannst das so schreiben:Das ist my.h:

    extern int foo;
    void print_foo();
    void print(int);
    

    Das sind die includes der my.cpp:

    #include "stdafx.h"
    #include "my.h"
    #include "std_lib_facilities.h"
    

    Und das der use.cpp:

    //#include "stdafx.h"
    //#include "my.h"
    

    Da die schon in my.cpp inculdet wurden, brauchst du die in use.cpp nicht mehr einbinden. Für den Compiler ist das ganze nach der Arbeit des Linkers eine Datei im gaesamten. Keine headerdateien, nur eine einzige .cpp Datei. Von daher ist es besser, wenn du in use.cpp oder in my.cpp #include "stdafx.h" und #include "my.h" weglässt.



  • Also ich schriebe mal den ganzen Text dieser Übung. Diese Übung kommt aus dem Buch: Einführung in die Programmierung mit C++.



  • Legen Sie drei Dateien an: my.h, my.cpp , und use.cpp. Die Headerdatei my.h soll folgende Deklarationen enthalten:

    extern int foo;
    void print_foo();
    void print(int);
    

    Die Quelldatei my.cpp kopiert mittels #include die Headerdateien my.h und std_lib_facilities.h ein und definiert print_foo(), um den Wert foo mit cout auszugeben, sowie print(int i), um den Wert von i mit cout auszugeben.

    Die Quelldatei use.cpp kopiert mittels #include die Headerdatei my.h ein, definiert main(), um den Wert von foo auf 7 zu setzen und anschliessend mit print_foo() den Wert von foo und mit print() den Wert 99 auszugeben. Beachten Sie, dass use.cpp nicht die Headerdatei std_lib_facilities.h einbindet, da sie ihre Elemente direkt verwendet.

    Kompilieren Sie die Daetein und führen Sie das Programm aus. Unter Windows müssen Sie use.cpp und my.cpp zu einem Projekt zusammenfassen und in use.cpp den Code {char cc; cin>>cc;} ergämzen, damit Sie die Ausgabe sehen können.



  • my.h

    Wie du!

    my.cpp

    #include "std_lib_facilities.h"
    #include "my.h"
    
    void print_foo()
    {
        cout << foo << endl;
    }
    
    void print(int i)
    {
        cout << i << endl;
    }
    

    use.cpp

    #include "my.h"
    
    int main()
    {
        foo = 4;
    
        print_foo();
        print(foo);
        print(99);
    
        return 0;
    }
    

    Das wars 😃 😃 😃 😃 😃 😃 😃 😃

    ich glaube in use.cpp braucht man den include sogar garnicht!



  • Und wo wird foo definiert?



  • Habe alles so gemacht nur es gibt wieder Probleme:

    Fehler 2 fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    Fehler 5 fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    Warnung 1 warning C4627: "#include "my.h"": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
    Warnung 4 warning C4627: "#include "my.h"": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
    Warnung 3 warning C4627: "#include "std_lib_facilities.h"": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.



  • Erstelle ein neues "LEERES" Konsolenprojekt, dann ist der stdafx Fehler weg. Du hast nämlich in den Projekteinstellungen noch vorkompilierte Header aktiviert.



  • Geanu, das ist es!



  • Ok das gemacht, neues Projekt ohne vorkompilierte Header. Doch jetzt sind folgende Meldungen:

    Fehler 1 error LNK2001: Nicht aufgelöstes externes Symbol ""int foo" (?foo@@3HA)". use.obj
    Fehler 2 error LNK2001: Nicht aufgelöstes externes Symbol ""int foo" (?foo@@3HA)". my.obj
    Fehler 3 fatal error LNK1120: 1 nicht aufgelöste externe Verweise. C:\Users\CMTest\Documents\Visual Studio 2008\Projects\use\Debug\use.exe



  • Wo ist foo deklariert? siehe 1. Antwort im thread, siehe 2. Antwort im Thread.

    Irgendwo muss "int foo" stehen bislang ist es nicht vorhanden.



  • foo ist im my.h deklariert. Und zwar als extern int foo;



  • HighLigerBiMBam schrieb:

    Wo ist foo deklariert? siehe 1. Antwort im thread, siehe 2. Antwort im Thread.

    Irgendwo muss "int foo" stehen bislang ist es nicht vorhanden.

    Prinzipiell meinst du das richtige, aber die Frage lautet:
    Wo ist es definiert 🙂

    extern int foo ist nämlich eine Deklaration.

    winux schrieb:

    foo ist im my.h deklariert. Und zwar als extern int foo;

    aber nirgends definiert.



  • foo sollte in use.cpp definiert sein

    foo = 4;
    

    Und es wird als int foo erkannt.



  • Das Problem ist gelöst danke an alle für die Hilfe. Ohne eure Hilfe hätte ich das nicht geschafft. Danke nochmals. Und hier ist der Code der dann die werte 7 und 99 ausgibt.

    my.h:

    extern int foo; 
    void print_foo(); 
    void print(int);
    

    my.cpp

    #include "std_lib_facilities.h" 
    #include "my.h" 
    
    int foo;
    
    void print_foo() 
    { 
        cout << foo << endl; 
    } 
    
    void print(int i) 
    { 
        cout << i << endl; 
    }
    

    use.cpp

    #include "my.h" 
    #include "std_lib_facilities.h"
    
    int main() 
    { 
        foo = 7; 
    
        print_foo(); 
        print(99); 
        char cc; 
        cin >> cc; 
        keep_window_open();
        return 0; 
    }
    

Anmelden zum Antworten