2012-05-27 17 views
7

Ist es möglich, die Funktion foo() von Foo.cpp aufzurufen, ohne den Funktionsnamen Foo :: foo() zu Foo :: newfoo() zu ändern.Aufruf des gleichen Namens Funktion

main.cpp

#include <iostream> 
#include "Foo.hpp" 

class Foo { 
public: 
    void foo() { 
     std::cout << "Foo::foo\n"; 
    } 
    void bar() { 
     std::cout << "Foo::bar\n"; 
     foo();// need to call foo() function from foo.cpp not Foo::foo() 
    } 
}; 

int main() { 
    Foo f; 
    f.bar(); 
    return 0; 
} 

Foo.hpp

#ifndef FOO_HPP_INCLUDED 
#define FOO_HPP_INCLUDED 

void foo(); 

#endif // FOO_HPP_INCLUDED 

foo.cpp

#include "Foo.hpp" 
#include <iostream> 
void foo(){ 
    std::cout << "foo\n"; 
} 

ps.sorry für mein schlechtes Englisch.

+0

Ist das wirklich ein Problem? Wie geschrieben, sieht Foo.cpp nur eine Definition des Namens 'foo'. Der einzige Konflikt liegt innerhalb der Definition von 'void Foo :: foo()' in 'main.cpp'. Das scheinen die Antworten zu sein. – Potatoswatter

Antwort

14

Verwenden Sie den vollständig qualifizierten Namen der freien Funktion.

::foo(); 

Die :: vor dem Funktionsnamen, teilt den Compiler die Funktion mit dem Namen foo(), das im globalen Bereich zu nennen.
Wenn die freie Funktion foo() in einem anderen Namespace ist, müssen Sie den vollständig qualifizierten Namen verwenden, der den Namespace angibt.

namespacename::foo(); 
1

Wenn die freie Funktion foo in einigen Namensraum xyz definiert ist, dies zu tun:

xyz::foo(); //if foo is defined in xyz namespace 

oder aber dies nur tun:

::foo();  //if foo is defined in the global namespace 

Dieser geht davon aus foo definiert ist in der globale Namespace.

Es ist besser, den Namespace für Ihre Implementierung zu verwenden. Vermeiden Sie, den globalen Namespace zu verschmutzen.

Verwandte Themen