Linken in Code::Blocks

Reyme

Grünschnabel
Ich hoffe ich bin im richtigen Forum :D

Ich habe folgendes Problem:

In meinem C++ - Buch (Der C++ Programmierer) bin ich gerade bei Klassen. Dort heißt es, dass man noch die ratio.o Datei, die beim compilieren von ratio.cpp entsteht, linken muss.

Ich habe irgendwo gelesen, dass das über Projekt -> Build Options... -> Linker Settings -> Add und dann das Auswählen der Datei funktioniert. Aber dann wird die Datei zwar in der Liste angezeigt, wirklich verändern tut sich allerdings nichts. Weiß jemand was ich dann machen muss?

Schonmal im Voraus vielen Dank für die Antworten :)
 
Das brauchst du eigentlich nicht selber machen.

Füge einfach die Datei (ratio.cpp) via Project->Add files zum Projekt hinzu.
 
Also ich vermute einmal eher, dass du nicht mit einem Projekt arbeitest, sondern nur mit einem normalen File. Hast du New->Projekt erstellt, oder New->File?
Wenn du ein file erstellt hast, musst du in der ratio.cpp nur auf "build and run" klicken, dann wird das file kompiliert und Code::Blocks macht alles für dich automatisch.
Wenn du ein neues Projekt erstellt hast, geht das auch automatisch, darüber brauchst du die überhaupt keine Sorgen zu machen.
 
OK vielen Dank soweit, das funktioniert jetzt.
Jetzt hab ich aber ein neues Problem:
in meiner Datei "ski.h" erstelle ich eine Klasse, ohne jedoch die Methoden zu definieren(kleiner Ausschnitt):

Code:
class ski {
    public:
        //Konstruktoren:
        ski();
        ski(int);

        int getalter() const;

        void springen();
    private:
        int alter;
};


In der Datei ski.cpp möchte ich dann springen definieren:

Code:
#include <iostream>
#include <cstdlib>
#include "ski.h"

void ski::springen() {
    int weite = rand() * 20 + 100;

    std::cout << "Weite: " << weite << " Meter!" << std::endl;
}

Wenn ich das ganze dann aber übersetzen möchte, bekomme ich die Fehlermeldung "multiple definition of 'ski::springen()' :(

Was mache ich falsch?
 
Hi

mach in der h-Datei noch #ifndef etc. dazu:
C++:
#ifndef SKI_HEADER
#define SKI_HEADER

class ski {
    ...
};

#endif
SKI_HEADER kann beliebig abgeändert werden, muss aber
bei ifndef und define gleich sein und darf in diesem Projekt nur einmal vorkommen.
Also bei mehreren h-Dateien verschiedene Namen nehmen.
 
Das mit dem IFDEF wird schon dabei sein, das macht CODE::BLOCKS automatisch. Er sagte ja, dass das nur ein Ausschnitt der datei ist.
Arbeitest du mit einem Projekt oder mit einem einzelnen File?
 
Bei der Erstellung des Projekts wurde automatisch eine main.cpp erstellt. Hast du die verwendet?
Wenn ja, entferne die main immer gleich vom Projekt und auch die main.o und main.exe. Erstelle die .cpp Datei selbst und alles wird funktionieren.
 
Ahh ich habe ein neues Projekt gestartet und dort gleich die main.cpp Datei gelöscht und anschließend den ganzen Quelltext nochmals eingegeben. Jetzt funktioniert alles wie geplant :)

Vielen Dank für eure Hilfe :)
 
Zurück