1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

namespace

  • Leocor
  • 24. März 2008 um 14:30
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Leocor
    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

  • Stefan Kögl
    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
    Punkte
    1.237
    Beiträge
    244
    • 24. März 2008 um 18:55
    • #3

    Vermutlich willst du im Headerfile ein extern dazuschreiben.

  • Leocor
    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
  • Plantschkuh!
    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.)

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

    danke so hats geklappt

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum