Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

1

22.11.2008, 23:43

Problem mit namespaces

Hi,
ich habe gerade angefangen mich ein wenig mit namespaces zu beschäftigen und direkt habe ich ein Problem.
Wenn ich einen namespace mit einer Variable x in einer Headerdatei, die von einer anderen Headerdatei und von einer Quellcodedatei eingebunden wird erstelle und den Code compiliere kommt die Fehlermeldung, dass die Variable x bereits in der Quellcodedatei deklariert sei, die die Headerdatei einbindet, welche die Headerdatei einbindet, in der sich der namespace befindet.
Ich befürchte dass ich etwas falsch oder nicht ganz verstanden habe.
cu
Signaturen werden überbewertet

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

23.11.2008, 04:13

:lol:
Du würdest auch besser ein wenig Beispiel Code zeigen, als lange um den heissen Brei rumzureden. ;)

Das geht natürlich nicht, da du durch das include die Variable mehrmals definierst, was der ODR ( Onde definition rule) wiederspricht.

Das hat direkt nichts mit dem namespace zu tun, sondern eher, dass du in einem Header eine Definition hast. ( Merke bei eingebauten Typen ist die Deklaration gelich auch die Definition). Du kannst die Variable als extern deklarieren und dann geht das.

Anonymous

unregistriert

3

23.11.2008, 10:47

Re: Problem mit namespaces

Zitat von »"GR-PA"«

Hi,
ich habe gerade angefangen mich ein wenig mit namespaces zu beschäftigen und direkt habe ich ein Problem.
Wenn ich einen namespace mit einer Variable x in einer Headerdatei, die von einer anderen Headerdatei und von einer Quellcodedatei eingebunden wird erstelle und den Code compiliere kommt die Fehlermeldung, dass die Variable x bereits in der Quellcodedatei deklariert sei, die die Headerdatei einbindet, welche die Headerdatei einbindet, in der sich der namespace befindet.
Ich befürchte dass ich etwas falsch oder nicht ganz verstanden habe.
cu


Main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include "Funkton.hpp"

using namespace std;

int main (void)
{
    // Variablen

    //

    int Lebensenergie = 100;

    // Funktion

    //

    Funktion (Lebensenergie);
}


Funktion.hpp

C-/C++-Quelltext

1
2
#include <iostream>
void Funktion (int Lebensenergie);


Funktion.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include "Funktion.hpp"

using namespace std;

void Funktion (int Lebensenergie);
{
    cout << "Lebensenergie: " << Lebensenergie << endl;
}


Ich hoffe, dass ich Deine Frage nicht falsch verstanden habe.
MfG

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

4

23.11.2008, 13:35

Hmm, vielleicht liegt es auch daran, dass du im header kein #pragma once bzw. #ifndef drin hast. Wie drakon schon sagte: zeig mal den Code! ;)

Spiri: Ich bin mir nicht ganz sicher, was du damit zeigen willst, aber ich bin mir eigentlich sicher, dass es nichts mit dem Problem zu tun hat.


Gruß Marius

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

23.11.2008, 13:43

Zitat von »"K-Bal"«

Hmm, vielleicht liegt es auch daran, dass du im header kein #pragma once bzw. #ifndef drin hast. Wie drakon schon sagte: zeig mal den Code! ;)

Spiri: Ich bin mir nicht ganz sicher, was du damit zeigen willst, aber ich bin mir eigentlich sicher, dass es nichts mit dem Problem zu tun hat.


Gruß Marius


Ne. Das hat nichts mit Includeguards zu tun. Die helfen dir nur, dass du einen Header (unsinnigerweise) 2 mal includest.
Multiple Definitionen sind einfach nicht erlaubt, da der Compiler sonst nicht wissen kann, welche er nehmen soll. ( Templates sind da eine Ausnahme, müssen aber überall genau gleich definiert sein).

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

6

25.11.2008, 17:23

Ja drakon hat schon recht ich war da ein klein wenig müde und ein wenig unkonzentriert... sry für den etwas unnötigen post das kommt davon wenn man am Wochenende nur ~2-3 h schläft... ;)
cu
Signaturen werden überbewertet

Werbeanzeige