Multiple definitions

Schnelle objektorientierte, kompilierende Programmiersprache.
AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Multiple definitions

Beitrag von AnGaiNoR » So Jan 10, 2010 8:02 pm

Also ich würde es so machen:

Console.h

Code: Alles auswählen

#ifndef CONSOLE_H
#define CONSOLE_H

void gotoxy (int x, int y);
void home (void);
void writehead (string header, string filepath);

#endif // CONSOLE_H

Console.cpp

Code: Alles auswählen

#include "Console.h"

#include <stdlib.h>
#include <stdio.h>
#include <iostream>

void gotoxy (int x, int y)
{
    printf("\033[%d;%dG", y, x);
}

void home (void)
{
    int x[2] = {0,0};
    printf("\033[%d;%dG",x[1],x[2]);
}

void writehead (string header, string filepath)
{
    FILE *ini;
    ini=fopen(filepath.c_str(),"t");
    fprintf(ini,header.c_str());
    fclose(ini);
}
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Multiple definitions

Beitrag von naums » So Jan 10, 2010 8:11 pm

muss in die Console.h #include <iostream> mit rein, weil String gibts ja nur in std. oder?
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Multiple definitions

Beitrag von naums » So Jan 10, 2010 8:13 pm

sobald ich die IOSTREAM wieder einbinde, kommt wieder der am anfagn erwähnte fehler.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Multiple definitions

Beitrag von cloidnerux » So Jan 10, 2010 8:18 pm

Du musst nur die "string.h" einbinden um Strings nutzen zu können.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Multiple definitions

Beitrag von naums » So Jan 10, 2010 8:19 pm

gleicher fehler wie vorhin
.globl truth
truth:
mov r0, #42
mov pc, lr

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Multiple definitions

Beitrag von AnGaiNoR » So Jan 10, 2010 8:29 pm

Die Console.cpp darfst du natürlich nicht mit #include einbinden!
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Multiple definitions

Beitrag von naums » So Jan 10, 2010 8:32 pm

öh.... sondern?
.globl truth
truth:
mov r0, #42
mov pc, lr

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Multiple definitions

Beitrag von AnGaiNoR » So Jan 10, 2010 8:43 pm

Einfach alle .cpp Dateien zusammenlinken. Welche IDE bzw. welchen Compiler nutzt du?
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Multiple definitions

Beitrag von Dirty Oerti » So Jan 10, 2010 8:45 pm

Die Datei musst du ganz "normal" kompilieren (wie arbeitest du, Konsole und Make oder CodeBlocks oder was?) und dann zusammen mit den anderen Dateien zum fertigen Programm linken.
Falls dein Problem daher kommt, dass es Funktionen in den Standardlibs gibt, die den selben Namen tragen, dann würde ich dir folgendes empfehlen:

console.h

Code: Alles auswählen

// die ifndef etc..
namespace Naums_Console {

// die Funktionsköpfe

};
// das endif
console.cpp

Code: Alles auswählen

#include "console.h"

// andere includes

// bitte selben Namen wie oben verwenden
namespace Naums_Console {

// Der Ganze Code der Funktionen

};
Nun dein Hauptprogramm (main.cpp)

Code: Alles auswählen

#include "console.h"
// etc

int main ()
{
     Naums_Console::irgendeineFunktionausdeinerDatei(parameter1, parameter2);
     return 0;
}

Zum kompilieren, mit dem gcc machst du das nun so:

g++ -o PROGRAMMNAME main.cpp console.cpp -I./ORDNER_MIT_INCLUDE_DATEI

(letzteres ist ein großes "el" )
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Multiple definitions

Beitrag von naums » So Jan 10, 2010 8:55 pm

ich arbeite mit Code::BLOCKS. also muss ich die Headerfile einbinden?
.globl truth
truth:
mov r0, #42
mov pc, lr

Antworten