c++ header in linux

Dieses Thema im Forum "C/C++" wurde erstellt von Echid, 28.01.2009.

  1. Echid

    Echid Jungspund

    Dabei seit:
    04.02.2008
    Beiträge:
    22
    Zustimmungen:
    0
    hallo leute,
    ich habe ein problem und zwar weiß ich nicht wie ich eine header datei unter linux in ein programm einbinde, als ich bei google gesucht habe stand man sollte einfach /usr/local/lib oder /usr/include einbinden oder /usr/include/g++(dieses verzeichnis existiert bei mir nicht), die ausgabe beim compilieren sieht folgender maßen aus:

    [x42x@noname C]$ gcc -o schueler ./schueler.c
    ./schueler.c:3: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Schueler’
    ./schueler.c:28: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
    ./schueler.c:40: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
    ./schueler.c:53: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
    ./schueler.c:68: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
    ./schueler.c:74: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
    ./schueler.c:81: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Schueler’
    ./schueler.c:96: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token


    wenn ich das programm auszuführen versuche trotz der fehler sagt er er kennt das kommando class nicht:


    ./schueler.c: line 2: class: command not found
    ./schueler.c: line 10: syntax error near unexpected token `char'
    ./schueler.c: line 10: `Schueler (char *name);'

    ich schreibe morgen schulaufgabe in c++ wäre nett wenn ihr mir schnell helfen könntet
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 der_Kay, 28.01.2009
    Zuletzt bearbeitet: 28.01.2009
    der_Kay

    der_Kay Doppel-As

    Dabei seit:
    28.02.2006
    Beiträge:
    140
    Zustimmungen:
    0
    Hast Du in einer Datei schueler.c eine Klasse definiert und dann versucht, diese mit gcc zu kompilieren?

    • Benenne schueler.c in schueler.cpp um.
    • gcc ist der C-Compiler. Verwende g++ Wenn Dein System das Kommando g++ nicht kennt, dann musst den C++-Comiler installieren.
    • class ist kein Kommando, sondern der Typenname für eine Klasse. Klassen gibt es nur in C++.
    Die Verzeichnisse, die Du angegeben hast, sind Standardverzeichnisse des Compilers, die findet er ohne weitere Angaben.
     
  4. Echid

    Echid Jungspund

    Dabei seit:
    04.02.2008
    Beiträge:
    22
    Zustimmungen:
    0
    aso ok danke,
    hat man g++ nicht standardmäßig bei linux mit installiert, denn ich finde es nicht auf meinem system und kann ich es normal über apt-get install g++ herunterladen weil er mein das packet kann nicht gefunden werden
     
  5. #4 JBR, 28.01.2009
    Zuletzt bearbeitet: 28.01.2009
    JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
    das hängt von der distribution und den eingben die du währen der installation gemacht hast ab
    betreffen apt mit apt cache search kannst du suchen gib uns mal die ausgabe der folgenden zwei befehle
    Code:
    apt-cache search gnu c++ compiler
    cat /etc/apt/sources.list
    
     
  6. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Naja, die Antwort hast du dir ja selber gegeben, oder? ;)

    Und das dein apt-get das nicht finden kann, ist verwunderlich (welches hast du eigentlich?): http://packages.debian.org/search?keywords=g++ (für Debian) oder http://packages.ubuntu.com/search?keywords=g++ (bei *buntu)
     
  7. Echid

    Echid Jungspund

    Dabei seit:
    04.02.2008
    Beiträge:
    22
    Zustimmungen:
    0
    danke für eure hilfe,
    also ich habs jetzt einfach über synaptic installiert aber mein programm enthält trotzdem noch fehler, das selbe programm läuft bei meinem freund auf windows ganz normal oder muss ich jetzt doch noch etwas einbinden mein programm sieht folgendermaßen aus:


    class Schueler
    {
    //Attribute
    private:
    char *name;

    public:
    //Konstruktor
    Schueler (char *name);
    //Copy-Konstruktor
    Schueler (Schueler &x);//<--Referenz
    //Zuweisungen mit =
    Schueler operator=(Schueler &x);
    //Destruktor
    ~Schueler();
    //Vergleich mit ==
    bool operator==(Schueler &x);
    //Getter
    char *getName();
    //Setter
    void setName(char *name);
    void grossbuchstaben();
    };

    //Konstruktor
    Schueler::Schueler(char *name)
    {
    int laenge=strlen(name)+1;
    this->name = new char[laenge];

    for (int i = 0; i < laenge; i++)
    {
    this->name = name;
    }
    }

    //Copy-Konstruktor
    Schueler::Schueler (Schueler &x)
    {
    char *anderer_name = x.getName();
    int laenge = strlen(x.getName())+1;
    this->name = new char[laenge];

    for (int i = 0; i < laenge; i++)
    {
    this->name = anderer_name;
    }
    }

    //Zuweisung mit =
    Schueler::Schueler operator=(Schueler &x)
    {
    char *anderer_name = x.getName();
    delete this->name;
    int laenge = strlen(x.getName())+1;
    this->name = new char[laenge];

    for (int i = 0; i <laenge; i++)
    {
    this->name = anderer_name;
    }
    return *this;
    }

    //Destruktor
    Schueler::~Schueler()
    {
    delete this->name;
    }

    //Getter
    char *Schueler::getName()
    {
    return this->name;
    }

    //Vergleich mit ==

    bool Schueler::operator==(Schueler &x)
    {
    char *anderer_name = x.getName();
    bool stimmt = true;
    while(stimmt = true)
    {
    int i = 0;
    if(this->name != anderer_name)
    {
    return false;
    }
    i++;
    }
    }

    void Schueler::setName(char *name)
    {
    int laenge = strlen(name);
    delete this->name;
    this->name= new char[laenge+1];
    for (int i = 0; i < laenge+1; i++)
    {
    this->name = name;
    }
    }

    //Call by Value
    void cbVFunktion(Schueler x)
    {
    x.setName("Anton");
    cout << "CbV:" << x.getName() << endl;
    }

    int main()
    {
    // Schueler peter mit namen peter anlegen
    Schueler peter("peter");
    // Schueler karl mit namen karl anlegen
    Schueler karl("karl");

    //Funktionsaufrufe
    cout << "--------Schueler peter--------" << endl;
    cout << peter.getName() << endl;
    peter.setName("heinz");
    cout << peter.getName() << endl;
    hans.grossbuchstaben();
    cout << peter.getName() << endl;
    cout << "--------Schueler karl--------" << endl;
    cout << karl.getName() << endl;
    karl = peter;
    cout << karl.getName() << endl;
    if (karl == peter)
    cout << "karl ist peter" << endl;
    else
    cout << "karl ist kein peter" << endl;
    return 0;
    }

    und die fehlermeldungen beim compilieren versteh ich nicht:

    [root@noname C]# g++ -o schueler2 ./schueler2.cpp
    ./schueler2.cpp: In constructor ‘Schueler::Schueler(char*)’:
    ./schueler2.cpp:26: error: ‘strlen’ was not declared in this scope
    ./schueler2.cpp: In copy constructor ‘Schueler::Schueler(Schueler&)’:
    ./schueler2.cpp:36: error: ‘strlen’ was not declared in this scope
    ./schueler2.cpp: In member function ‘Schueler Schueler::operator=(Schueler&)’:
    ./schueler2.cpp:48: error: ‘strlen’ was not declared in this scope
    ./schueler2.cpp: In member function ‘bool Schueler::operator==(Schueler&)’:
    ./schueler2.cpp:58: error: ‘strlen’ was not declared in this scope
    ./schueler2.cpp: In member function ‘void Schueler::setSpitzname(char*)’:
    ./schueler2.cpp:76: error: ‘strlen’ was not declared in this scope
    ./schueler2.cpp: In member function ‘void Schueler::Grossbuchstaben()’:
    ./schueler2.cpp:83: error: ‘strlen’ was not declared in this scope
    ./schueler2.cpp:84: error: ‘toupper’ was not declared in this scope
    ./schueler2.cpp: In function ‘void CallByValueFunktion(Schueler)’:
    ./schueler2.cpp:90: error: ‘cout’ was not declared in this scope
    ./schueler2.cpp:90: error: ‘endl’ was not declared in this scope
    ./schueler2.cpp: In function ‘int main()’:
    ./schueler2.cpp:95: error: ‘cout’ was not declared in this scope
    ./schueler2.cpp:95: error: ‘endl’ was not declared in this scope
    ./schueler2.cpp:107: error: ‘system’ was not declared in this scope

    was heißt denn da, z.B. das strlen nicht deklariert sei, das ist doch eine normale funktion oder ist der aufruf falsch

    sorry für den langen post :D
     
  8. #7 der_Kay, 28.01.2009
    Zuletzt bearbeitet: 28.01.2009
    der_Kay

    der_Kay Doppel-As

    Dabei seit:
    28.02.2006
    Beiträge:
    140
    Zustimmungen:
    0
    Die Standardlibrary von Windows bringt ein paar Funktionen so mit. Füge
    Code:
    #include <string.h>
    ganz oben ein. Darunter
    Code:
    using namespace std;
    Habe leider kein Linux hier und kann das nicht prüfen. Aber da scheinen leider noch mehr Fehler drin zu sein, die MS nicht krumm nimmt...
     
  9. #8 bitmuncher, 28.01.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Aus der Manpage zu strlen (man strlen).

    Code:
    SYNOPSIS
           #include <string.h>
    
           size_t strlen(const char *s);
    
     
  10. Echid

    Echid Jungspund

    Dabei seit:
    04.02.2008
    Beiträge:
    22
    Zustimmungen:
    0
    ok danke jetzt funktioniert es, hab noch ein paar leichtsinnsfehler gehabt,
    wenn ich das programm ausführe bleibt er im programm und ich komm nicht zur befehlseingabe zurück, muss ich das sowas wie ein system("hold") einfügen?
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
    binde den Quellcode in
    Code:
    (CODE)(/CODE) - runde durch eckige klammern ersetzten
    klamern ein, das erhöht die lesbarkeit
     
  13. #11 SkydiverBS, 28.01.2009
    Zuletzt bearbeitet: 28.01.2009
    SkydiverBS

    SkydiverBS Tripel-As

    Dabei seit:
    15.01.2005
    Beiträge:
    207
    Zustimmungen:
    0
    Ort:
    Freising
    Nein, dein Programm enthält eine Endlosschleife und außerdem einige Speicherlecks. Ich glaube du brauchst noch etwas Nachhilfe in C++ :) . Wie lange nehmt ihr das denn schon durch und in welchem Fach?

    1. Wenn du mit new ein Array anlegst, z.B. so:
    Code:
    this->name = new char[laenge];
    dann must du es auch mit der Array-Form von delete wieder freigeben:
    Code:
    delete[] this->name;
    2. Die operator==-Funktion solltest du noch überarbeiten. Zunächst setzt du die Variable "stimmt" in der while-Schleife nirgends auf false, sodass die Schleife endlos läuft. Die Bedingung in der while-Schleife sollte mit einem Vergleichsoperator (==) und nicht mit einem Zuweisungsoperator erfolgen:
    Code:
    while(stimmt =[COLOR="Red"]=[/COLOR] true)
    Die Variable "i" mußt du außerhalb der Schleife definieren, sonst bleibt der Wert immer auf 0. Weiterhin mußt du überprüfen das die Arrays "this->name" und "anderer_name" genug Elemente enthalten, weil du ansonsten ein Segmentation fault bekommst wenn du auf einen Index über der Größe des Arrays zugreifst. Mein Vorschlag für die Implementierung der operator==-Methode in Pseudocode:
    Code:
    Funktion Vergleich(Zeichenkette1, Zeichenkette2):
        Wenn Länge von Zeichenkette1 != Länge von Zeichenkette2:
            Return False
    
        Index = 0
        Solange Index < Länge von Zeichenkette1:
            Wenn Zeichenkette1[Index] != Zeichenkette2[Index]:
                Return False
            Index++
        Ende Solange
        Return True
    Ende Funktion
    
    Sollt ihr die Vergleichs-Methode selbst programmieren oder könnt ihr euch der bei C++ mitgelieferten Funktionen bedienen? Dann verwende in der operator==-Methode lieber die strncmp-Funktion anstatt die Funktionalität selbst zu programmieren. Oder noch besser: wenn ihr schon in C++ programmiert, verwende die String-Klasse aus der Standard-Bibliothek und nicht char-Arrays. Außer ihr seit noch nicht soweit und verwendet deswegen char-Arrays um den Umgang damit zu lernen.

    Hinweis: Wenn du C++ programmierst solltest du nicht die C-Header einbinden falls du C-Funktionen brauchst, sondern die entsprechenden C++-Header. Anstatt also
    Code:
    #include <string.h>
    zu verwenden, nimmst du
    Code:
    #include <cstring>
    (siehe http://www.cppreference.com/wiki/c/start).

    Gruß,
    Philip
     
Thema:

c++ header in linux

Die Seite wird geladen...

c++ header in linux - Ähnliche Themen

  1. Windows Header in Linux einbinden

    Windows Header in Linux einbinden: Ich brauche für ein programm windows.h wo kann man sich die downloaden und wo muss ich sie reinkopieren verwende Ubuntu und als compiller g++
  2. Ubuntu: passende Linux-headers

    Ubuntu: passende Linux-headers: um ndiswrapper zu kompilieren (ich will mein wlan zum laufen bekommen) brauche ich die linux-headers die zu meinem kernel passen, das wäre...
  3. Mplayer unter SuSE Linux 9.3 Vob sub bad magic in ifo header

    Mplayer unter SuSE Linux 9.3 Vob sub bad magic in ifo header: Hallo, Wenn ich mit Mplayer eine DvD abspielen möchte, kommt die Fehlermeldung "Vob sub bad magic in ifo header". Bitte sagt mir, wie ich...
  4. Lemon Pi: Bastelrechner mit Quadcore-CPU und RPi-Pin-Header

    Lemon Pi: Bastelrechner mit Quadcore-CPU und RPi-Pin-Header: Die chinesische Firma Embedstudio hat auf Indigogo eine Crowdfunding-Kampagne gestartet, um ihren Einplatinenrechner Lemon Pi zu finanzieren. Wie...
  5. Kdevelop findet open CV headerfiles nicht

    Kdevelop findet open CV headerfiles nicht: Hallo, Versuche auf Kdevelop umzusteigen. "Hello World" klappt auch. habe open CV heruntergeladen und kompiliert. Die headerfiles liegen auch...