[Anfänger] Headerdatei: was gehört rein, was nicht?



  • thuering schrieb:

    a) Sollte ich sämtliche Includes von STL-Headern in #ifndef / #define / #endif setzen, um nicht alles x-mal zu inkludieren? Oder gibts da eine Automatik?

    Nicht nur um die STL-Header. Ein Include-Guard gehört um den gesamten Inhalt des Headers herum (btw, die Standard-Header dürften sich in der Hinsicht schon selber schützen).

    b) Ich möchte / muss für meine Klasse, die ja nun in einer Headerdatei (battle.h) definiert wird, eine globale Variable anlegen. Da gibts dann aber einen Error beim linken:

    [...]

    Gleicher Fehler. Was ist hier falsch? Besonderheiten bei globalen Variablen?

    Nein, für Variablen gelten die selben Regeln, die fdfdg schon genannt hat - in den Header gehört nur eine Deklaration ( extern int global_id; ), die Definition sollte in einer CPP-Datei landen.



  • Danke, läuft.
    Das "extern" hatte ich sogar auch schon rausgefunden 🙂

    Momentan arbeite ich mit MSVC 2010 Express - wenn ich jetzt "#pragma once" einbaue und später auf gcc umsteige, gibts dann damit Probleme?



  • GCC unterstüzt es soweit ich weiß, aber es gibt keinen Grund das zu verwenden, da nicht standardkonform. Mach einfach folgendes:

    #ifndef MYHEADER_HPP
    #define MYHEADER_HPP
    
    // quellcode
    
    #endif // MYHEADER_HPP
    


  • GCC kennt wenn ich mich nicht täusche #pragma once nicht. Aber warum willst du eigentlich von VC auf GCC umsteigen?



  • Jonas OSDever schrieb:

    GCC kennt wenn ich mich nicht täusche #pragma once nicht.

    Dachte ich zwar auch, aber scheinbar kann er das schon länger.
    Es spricht auch nichts dagegen, beides zu verwenden. Die normalen Includeguards sind Pflicht, aber ein zusätzliches #pragma once davor schadet nicht.
    Ein Compiler, der #pragma once nicht kennt, muss es ignorieren.



  • Wenn man sich fragt, was in eine Header-Datei gehört und was nicht, hat man wahrscheinlich die one-definition-rule nicht verinnerlicht. Das ist eine "große" (mehr als ein Satz) und wichtige Regel, die man kennen sollte. Darüber hinaus, sollte man so wenig wie möglich im Header verraten, um Abhängigkeiten zu reduzieren. Der Rest ergibt sich mit gesundem Menschenverstand.





  • OK, #ifndef und #pragma once werde ich beide verwenden. Zu gcc werde ich sicherlich demnächst wechseln, da ich Plattformabhängig programmieren möchte und mein Progrämmchen dann auch gerne direkt unter LiNNux weiterentwickle. Außerdem habe ich in diesem Forum schon des öfteren gelesen, gcc sei der einzige ernsthafte Compiler... 😃 😉
    wxSkip: Vielen Dank für diesen äußerst informativen Link / Post! 👍



  • thuering schrieb:

    OK, #ifndef und #pragma once werde ich beide verwenden. Zu gcc werde ich sicherlich demnächst wechseln, da ich Plattformabhängig programmieren möchte und mein Progrämmchen dann auch gerne direkt unter LiNNux weiterentwickle. Außerdem habe ich in diesem Forum schon des öfteren gelesen, gcc sei der einzige ernsthafte Compiler... 😃 😉
    wxSkip: Vielen Dank für diesen äußerst informativen Link / Post! 👍

    Keine Ursache, verlinke ich immer 😉
    Und das mit dem ernsthaften Compiler hast du immer von Pi gelesen, oder?



  • Ach, ich lese gerade, ich möchte natürlich plattformUNabhängig programmieren 🙄
    Ich hatte das Gefühl, den Spruch über gcc hier von mehreren Personen zu lesen...

    Pi == 314159265358979 ? http://www.c-plusplus.net/forum/u115511



  • Ja, ich bin ich. Oder so.

    Und für fortgeschrittenes C++ ist der GCC der bessere Compiler.
    Er ist, was templates angeht, extrem standardkonform, MSVC führt da irgendwas komisches auf, offenbar kein Königs-Lookup.

    Wie auch immer. MSVC ist für dich momentan (noch) gut genug. Der Debugger von MSVC ist übrigens wirklich super.



  • 314159265358979 schrieb:

    Wie auch immer. MSVC ist für dich momentan (noch) gut genug.

    Na Danke! Toll, wie Du meine weltweit beachteten Programmierleistungen schätzt... *hust* 😉

    314159265358979 schrieb:

    Der Debugger von MSVC ist übrigens wirklich super.

    Als wenn ich schon SO WEIT wäre, dass ich den Debugger auch nur ein mal schon benutzt hätte...
    Ich brauche weder MSVC noch gcc. Ich programmiere mir heute Abend meinen eigenen C++ Compiler. In Assembler und Ada. Programmiersprachen für echte Männer halt. 🙄 :p

    Mal im Ernst: Ich will demnächst wirklich weg von Windows; Ich würde das gerne nur noch in Ausnahmefällen als VM starten. Ich bin schon lange großer openSUSE- aber auch Solaris-Fan (was Serversysteme angeht). Für beide Systeme gibt es Eclipse, welches anscheinend mit ordentlich Rückenwind aus der Industrie vorangetrieben wird. Wie ist denn hier die Meinung zu Eclipse?



  • Ich benutze die Eclipse selbst ... und bin damit wohl der einzige hier 😃



  • Zufallszahlen mit Minimum / Maximumwert
    Die Syntax zur Erzeugung von Zufallszahlen ist mir bekannt. Nur stehe ich gerade auf dem Mathe-Schlauch, wie ich Zufallszahlen in einem bestimmten Zahlenbereich erzeuge.

    Das hier

    int Wuerfeln(int min, int max)
    {
    	int zufallszahl = rand() % max + min;
    	return zufallszahl;
    }
    

    ist ja mathematisch falsch, denn so kann das Maximum überschritten werden.
    Ich hab wieder Würmer im Hirn...


  • Mod

    Dann zieh doch vorher das Minimum vom Maximum ab!



  • Jaaaa! Jaaaa! Das ist es! Warum nicht gleich?! Naja, es ist schon spät.



  • Nochmal einfache Mathematik

    Ich möchte ein if möglichst knapp formulieren:

    if (runde == 1 oder 4 oder 7 oder 10 oder 13 oder...) (immer in 3 Schritten weiter)

    Mach ich da was mit dem Modula-Operator?



  • Das Ding heißt Modulo

    if ((runde - 1) % 3 == 0)
    

Anmelden zum Antworten