1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

namespace

  • Leocor
  • 24. März 2008 um 14:30
  • Unerledigt
  • Leocor
    4
    Leocor
    Mitglied
    Punkte
    165
    Beiträge
    23
    • 24. März 2008 um 14:30
    • #1

    Hallo!

    ich programmier c++ noch nicht so lang! darum wird das eher ne leichte frage sein!

    ich hab eine Data.h:

    Code
    namespace data
    {
    	int N,M;
    
    
    	void usage(string s = "");
    	void printErr(string sz = "");
    	void input(string s);
    	void check(string s);
    	void output(string s);
    	void setCMD(string s);
    }
    Alles anzeigen


    &dazu noch eine Data.cpp wo ich die Funktionen definiere!
    sobald ich jetzt die Data.h in meiner main.cpp inlude

    schreit der compiler:
    ... multiple definition of `data::N'
    ../Data.cpp:6: first defined here

    und das geiche für M auch

    was mach ich falsch?

    PS: ach ja die meldung bringt er beim linken

    http://de.youtube.com/watch?v=H9B4a2KEoGY&feature=related
    http://de.youtube.com/watch?v=HhHsXAVHyaA&feature=related

  • Stefan Kögl
    10
    Stefan Kögl
    Mitglied
    Reaktionen
    10
    Punkte
    1.010
    Beiträge
    199
    • 24. März 2008 um 16:38
    • #2

    Wie sollen wir das beurteilen, wenn du uns den Code aus Data.cpp vorenthältst?

    -- Stefan

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 24. März 2008 um 18:55
    • #3

    Vermutlich willst du im Headerfile ein extern dazuschreiben.

  • Leocor
    4
    Leocor
    Mitglied
    Punkte
    165
    Beiträge
    23
    • 24. März 2008 um 19:52
    • #4

    Data.cpp

    Code
    #include "Data.h"
    
    
    namespace data{
    
    
    void usage(string s){
    
    
    	cerr << s <<"\n";
    	cerr << "Usage: " << cmd << " [-m M –n N | -i <infile> | -c <infile>] [-o <outfile>]\n";
    	printErr();
    }
    
    
    void printErr(string sz){
    	cerr << sz << "\n";
    	exit(EXIT_FAILURE);
    }
    
    
    void input(string s){
    	static int input = 0;
    
    	input++;
    
    	if(input > 1)
    		usage("Too many input-arguments");
    
    }
    
    
    void check(string s){
    	static int check = 0;
    
    	check++;
    
    	if(check > 1)
    		usage("Too many check-arguments");
    
    
    }
    
    
    void output(string s){
    	static int output = 0;
    
    	output++;
    	if(output > 1)
    		usage("Too many output-arguments");
    
    }
    
    
    void setCMD(string s){
    	if(s.length() > 2 && (s.at(0) == '.' && s.at(1) == '/'))
    		s = s.substr(2);
    
    	cmd = s;
    }
    }
    Alles anzeigen

    Data.h

    C
    #ifndef DATA_H_
    #define DATA_H_
    
    
    #include <string>
    #include <iostream>
    
    
    using namespace std;
    
    
    namespace data
    {
    	int N,M;
    	string cmd;
    
    
    	void usage(string s = "");
    	void printErr(string sz = "");
    	void input(string s);
    	void check(string s);
    	void output(string s);
    	void setCMD(string s);
    }
    
    
    #endif /*DATA_H_*/
    Alles anzeigen

    ach ja: übersetzten kein problem
    aber linken mag er nicht! (sobald ich die header-Datei in der main include)

    Code
    g++ -ansi -pedantic -Wall -c main.cpp
    g++ -ansi -pedantic -Wall -c GetOpt.cpp
    g++ -ansi -pedantic -Wall -c Data.cpp
    g++ -ansi -pedantic -Wall -c Option.cpp
    g++ -o mastermind -g main.o GetOpt.o Data.o Option.o
    Data.o:(.bss+0x8): multiple definition of `data::cmd'
    main.o:(.bss+0x8): first defined here
    Data.o:(.bss+0x0): multiple definition of `data::N'
    main.o:(.bss+0x0): first defined here
    Data.o:(.bss+0x4): multiple definition of `data::M'
    main.o:(.bss+0x4): first defined here
    collect2: ld returned 1 exit statusmake: *** [mastermind] Fehler 1
    Alles anzeigen

    http://de.youtube.com/watch?v=H9B4a2KEoGY&feature=related
    http://de.youtube.com/watch?v=HhHsXAVHyaA&feature=related

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 24. März 2008 um 20:05
    • #5

    Die Lösung ist, wie oben schon erwähnt, Variablen in Header-Files immer mit "extern" zu deklarieren. Und in genau einem Code-File dann eine Definition der Variablen anführen, also eine Wiederholung der Deklaration ohne "extern". (Blabla, globale Variablen böse, blabla.)

    *plantsch*

  • Leocor
    4
    Leocor
    Mitglied
    Punkte
    165
    Beiträge
    23
    • 24. März 2008 um 20:29
    • #6

    danke so hats geklappt

    http://de.youtube.com/watch?v=H9B4a2KEoGY&feature=related
    http://de.youtube.com/watch?v=HhHsXAVHyaA&feature=related

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung