3 Stimmen

c++-Namensraum aus einer anderen Quelldatei

Ich habe eine Datei namens test1.cpp

namespace a {
int main1() {
    return 3;
}
}

Und ich habe eine weitere Datei test2.cpp

#include <stdio.h>
using a::main1;
int main() {
    printf("%d", a::main1());
}

Dann erhielt ich einen Kompilierungsfehler, der besagte 'a' has not been declared mit g++. Bitte helfen Sie mir, herauszufinden, was ich hier verpasst habe und wie man das normalerweise macht.

Ich danke Ihnen.

4voto

Daniel A. White Punkte 180762

Sie müssen den Namespace, die Klasse und die Funktion in einer Header-Datei deklarieren und diese in die test2.cpp Datei.

1voto

StevieG Punkte 8563

Sie müssen Ihr a::main1 in einer Header-Datei deklarieren, diese test1.h nennen und dann diesen Header in test2.h einbinden. Andernfalls hat test2 keine Möglichkeit zu erfahren, was Sie in test1 dekaliert haben.

test1.h

namespace a {
int main1();
}

test1.cpp

namespace a {
int main1() {
    return 3;
}
}

test2.cpp

#include <stdio.h>
#include test1.h
using a::main1;
int main() {
    printf("%d", a::main1());
}

0voto

Ihre Funktion main1() ist im Namensraum 'a' deklariert. Wenn Sie es also in der Datei printf() müssen Sie sicherstellen, dass der Compiler weiß, in welchem Namespace er nachschlagen muss. Es gibt zwei Möglichkeiten, dies zu tun (die ich kenne):

  1. Sie können den Namespace explizit aufrufen, indem Sie :: wie Sie es getan haben:

    printf ("%d", a::main1());
  2. Oder Sie können, irgendwo über der ersten Verwendung, dem Compiler sagen, dass er generell nach Symbolen im 'a'-Namensraum suchen soll, indem Sie die Zeile verwenden:

    using namespace a;

Der von mir verwendete Compiler (MS Studio 2008) hat sich nicht beschwert, als ich beide Techniken zusammen verwendet habe.

Ich glaube, der Grund für die Fehlermeldung war, dass Ihre "using"-Anweisung für den Compiler nicht korrekt geformt war (siehe oben).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X