2016-11-22 5 views
0

Der Code kompilieren ohne Fehler, würde ich gerne wissen, was ist die unterschiedliche deklarierende externe Funktion innerhalb und ohne Namespace?Aufruf externe Funktion ohne Angabe des Namespace

--a.h--

namespace mynamespace { 
    extern void foo(); 
} 

--a.c--

namespace mynamespace { 
    void foo(){ 
     dosomething; 
    }; 
} 

Gibt es Bedenken, dass ich darum kümmern sollte, wenn Aufruf foo() ohne Angabe Namensraum?

#include "a.h" 
int main(int argc char *argv) 
    foo() 
} 

statt

#include "a.h" 
int main(int argc char *argv) 
    mynamespace::foo(); 
} 
+3

* "Gibt es irgendwelche Bedenken, über die ich beim Aufruf von foo() nachdenken sollte, ohne den Namespace anzugeben?" * Versuchen Sie es, Sie werden es sehr schnell herausfinden. Der Compiler wird Ihnen sagen, was er von Ihrem Code hält. –

+0

@IgorTandetnik seltsame Dinge ist, dass mein Compiler keine Warnung oder Fehler zeigte, verwende ich gcc-4.9 auf debain. –

+0

Die Übersetzungseinheit mit 'main', wie gezeigt, [kann nicht kompiliert werden] (http://rextester.com/UQO84160). Wenn dies der Fall ist, geben Sie entweder eine Deklaration von "foo" in einem globalen Namespace an, oder Sie verwenden 'namespace mynamespace;' oder 'using mynamespace :: foo;' irgendwo in Ihrem Code, das Sie nicht angezeigt haben. –

Antwort

0

Es stellt sich heraus, dass using namespace mynamespace; bereits in anderen Header-Datei deklariert wird. Wenn also eine Datei Header-Dateien enthält, die bereits using namespace mynamespace; definiert haben, wirkt sich dies auch auf die aktuelle Header-Datei aus.

Verwandte Themen