In nur einer Datei programmieren



  • Hi,

    bisher habe ich immer so programmiert, dass ich für neue Klassen auch neue Datei genommen habe, schön mit .h und .cpp-Dateien, und die Header dann in der main.cpp includet.

    Jetzt muss ich aber alles in nur einer Datei machen, und komme damit nicht klar. Wie muss das denn da aussehen? Kann doch eigentlich nicht so schwer sein, aber ich bekomme es einfach nicht hin.
    Habt Ihr da Rat für mich?

    MfG, Ozzy



  • Du musst die Klassen einfach in der gleichen Datei, jedoch ausserhalb von main() deklarieren.
    Damit bin ich mir nicht so sicher: Mindestens das 'class BspKlasse{};' muss über(!) der main() stehen. (So ist es ja im Grunde auch, wenn du das Ding per '#include ...' einfügst.)
    Die Definitionen der Konstruktoren 'BspKlasse::BspKlasse( // initialisiere...)' können dann auch unter der main() stehen.

    also:

    class BspKlasse
    {
      private:
    
      public :
        // Konstruktoren
        BspKlasse();
    
        // Methoden
        void BspMethode( int );
    
    };
    
    void main(void){ // Hauptprogramm...}
    
    BspKlasse::BspKlasse(){ // initialisiere...}
    BspKlasse::BspMethode( int x ) { // mache was mit "x" }
    

    Ich hoffe dir geholfen zu haben.

    Gruß
    Christian



  • Hallo

    es heißt int main.

    chrische



  • Vielen Dank für Eure Antworten. Das mit dem int statt void hatte ich schon gemerkt 😉

    MfG, und vielen Dank noch einmal, Ozzy



  • chrische5 schrieb:

    Hallo

    es heißt int main.

    chrische

    Je nachdem, ob main() einen Wert zurückgeben soll oder nicht. Ich lasse main() meistens nichts zurückgeben, daher das "void". Es funktioniert beides. Wenn ihr "int main()" benutzt, müsst ihr nur darauf achten, ,dass (meist am Schluß der main()- Funktion auch ein "return 'irgendwas';" folgt.

    Gruß
    Christian



  • ChrisPHL schrieb:

    Je nachdem, ob main() einen Wert zurückgeben soll oder nicht. Ich lasse main() meistens nichts zurückgeben, daher das "void". Es funktioniert beides. Wenn ihr "int main()" benutzt, müsst ihr nur darauf achten, ,dass (meist am Schluß der main()- Funktion auch ein "return 'irgendwas';" folgt.

    Leider falsch. In zweierlei Hinsicht.
    1. Es heisst int main. Punkt. Ein void main ist im Standard nicht definiert.
    2. Ein fehlendes return in der Funktion int main wird implizit als return 0 angesehen. Wichtig: Das gilt nur in int main und auch nur in C++.



  • machs doch einfach so wie der Compiler auch. Schreib alle deine Klassen so wie du es machen würdest und da wo du dein #include stehen hast fügst du halt einfach den Inhalt der Datei ein. SChon hast du deine "ein-Datei-Source-Programm"



  • ChrisPHL schrieb:

    Du musst die Klassen einfach in der gleichen Datei, jedoch ausserhalb von main() deklarieren.
    Damit bin ich mir nicht so sicher: Mindestens das 'class BspKlasse{};' muss über(!) der main() stehen. [/code]

    Also, irgendwie denke ich, dass das so nicht stimmt. Es muss mindestens das class foo; da stehen, aber ohne geschweifte Klammern. Definieren kann man die Klasse dann auch nach der main.

    Oder irre ich mich hier?



  • Nö, die Funktionen die du in der main() aufrufen willst musst du mindestens vorher als Prototyp drin haben. So wie ChrisPHL das gemacht hat, ist schon richtig (bis auf das void main :p ).
    Du kannst aber wirlich auch die main() einfach zuletzt machen, ist ja eh nicht so viel drin, die Action geschieht in den Klassen.



  • Jetzt habe ich doch noch mal eine Frage: Wofür steht denn dieses viel zitierte "foo"? Ich sehe es immer wieder als Bsp.- Klasse oder -Funktion.

    Noch mal zu dem "int main() oder void main()": Standard hin oder her, das nicht nicht Standard gemäße "void main()" funktioniert (bei mir) einwandfrei. Wer sagt denn, dass man sich an den Standard halten muss? 😉 Natürlich ist es dennoch generell sinnvoll, das ist klar.

    Gruß
    Christian



  • Steht bei Wikipedia:

    http://de.wikipedia.org/wiki/Foo

    MfG, Ozzy



  • Hallo

    ChrisPHL schrieb:

    Wer sagt denn, dass man sich an den Standard halten muss? 😉

    Wenn man den Compiler wechselt, ist es schon schön, wenn man sich an den Standard hält, weil das die Portierung erleichtert. Außerdem ist es schön, weil es Programme vergleichbar und damit besser wartbar macht (stimmt jetzt vielleicht nicht für main, aber sonst)

    chrische



  • chrische5 schrieb:

    Hallo

    ChrisPHL schrieb:

    Wer sagt denn, dass man sich an den Standard halten muss? 😉

    Wenn man den Compiler wechselt, ist es schon schön, wenn man sich an den Standard hält, weil das die Portierung erleichtert. Außerdem ist es schön, weil es Programme vergleichbar und damit besser wartbar macht (stimmt jetzt vielleicht nicht für main, aber sonst)

    chrische

    Stimmt voll und ganz!

    Christian



  • hmmm wieso muss man die als prototyp mindestens angeben bevor man sie in der main benutzt ?

    int foo(int a,int b){
        int c = a+b;
        return c;
    }
    
    int main(void){
        foo(4,6);
        return  0;
    }
    

    geht doch genauso ohne prototyp



  • Meinte sowas:

    class Foo;
    
    int main(void){
        Foo theFoo;
        theFoo.foo(4,6);
        return  0;
    }
    
    class Foo
    {
    public:
        int foo(int a,int b){
            int c = a+b;
            return c;
        }
    };
    

    Geht nicht.



  • Stelfer schrieb:

    geht doch genauso ohne prototyp

    Ja, weil du dort vor der main() die komplette Definition hast - und die beinhaltet auch die Deklaration der Funktion (also den Prototyp).

    Der Compiler muß einen Namen zumindest kennen, bevor er ihn verwenden kann. Und dazu benötigt er entweder die Deklaration dieses Namens (Prototyp oder extern-Variable) oder seine Definition.


Anmelden zum Antworten