Problemem mit Headern, oder Gnu...Ich weiß nicht Hilfe!!!



  • Also ich wollt letzlich das mit der Modularisierung mal probieren, da ich grad bei Klassen bin und sich das anbot... jetzt ist aber das Problem, dass selbst das denkbar einfachste Beispiel net funzt

    Hier die Datei BSP4A.cpp

    #include <iostream>
    
    using namespace std;
    
    void ausgabe1(void)
    {
     cout << "Hello World!" << endl,
    }
    
    void ausgabe2(void)
    {
     cout << "Hallo Welt!" << endl;
    }
    

    Dann die Header BSP4A.h

    #ifndef __BSP4_H
    #define __BSP4_H
    
    void ausgabe1(void);
    void ausgabe2(void);
    
    #endif
    

    und die main die da heißt BSP4.cpp

    #include "BSP4A.H"
    
    int main()
    {
     ausgabe1();
     ausgabe2();
    }
    

    so! Ich kompiliere mit Gnu unter Linux...und wenn ich jetzt den Befehl
    g++ BSP4.cpp
    eingebe, dann meckert er rum dass er die reference keinen bezug hat(bzw haben)
    und BSP4A.cpp kann ich auch net einfach so kompilieren weil er keine main findet...
    Was muss ich machen damit dass Programm läuft?
    Hilfe!!!! 😞

    Ach ja und Danke im voraus!



  • g++ BSP4.cpp BSP4A.cpp



  • #include "BSP4A.h" // In der cpp die h/hpp includieren
    #include <iostream>
    
    //...
    void ausgabe1(void) // Verwendung von (void) in C++ eigentlich unüblich
    //...
    


  • Anmerkung: Doppelte Unterstriche sind für den Compiler reserviert. Sprich beginn nicht mit denen, da da unter Umständen irgendwo was überdeckst.



  • okay okay danke erstmal...
    es war wirklich nur, dass ich zu blöd bin den compiler richtig zu bedienen 😞

    @drakon
    ich hab das beispiel ausm buch abgreschriebn...einfach weil ich halt wissen wollte wies einfach funktioniert aber...
    wenn __ nicht gut ist, wie wäre es dann besser???

    achja und ich musste die header nicht noch in die zweite c.datei einbinden...



  • Allgemein sollte man keinen Bezeichner mit Unterstrichen beginnen und keine nehmen in denen irgendwo zwei aufeinanderfolgende Unterstriche enthalten sind. Jene sind in der Regel dem Compiler vorbehalten. Die Wahrscheinlichkeit schon verwendete zu erwischen ist gering aber lieber auf Nummer sicher gehen, weil sich sowas beschissen debuggen läßt.

    Besser als __NARF__NARF wäre also NARF_NARF oder auch NARF_NARF_ oder N_A_R_F_N_A_R_F



  • N.E.R.D. schrieb:

    wenn __ nicht gut ist, wie wäre es dann besser???

    Bei Includegards mache ich es z.B. wie folgt:
    Habe ich einen Header termin.h in dem der Namensraum projekt::kalender verwendet wird: PROJEKT_KALENDER__TERMIN__HEADER

    Dies ist jetzt natürlich nur ein Beispiel wie ich es mache, aber für einfache/doppelte Unterstriche am Anfang gibt es genügend Alternativen.



  • #ifndef BSP4_H
    #define BSP4_H
    

    Logisch, oder?
    Aber ich mache das immer so:

    #ifndef MEINPROJEKT_BSP4_H
    #define MEINPROJEKT_BSP4_H
    

Anmelden zum Antworten