2012-05-27 9 views
7

¿Es posible llamar a la función foo() desde Foo.cpp sin cambiar el nombre de función Foo :: foo() a Foo :: newfoo().llamando al mismo nombre función

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 por mi pobre Inglés.

+0

¿Esto realmente ilustra el problema? Como está escrito, Foo.cpp solo ve una definición del nombre 'foo'. El único conflicto está dentro de la definición de 'void Foo :: foo()' en 'main.cpp'. Eso es lo que las respuestas parecen estar abordando. – Potatoswatter

Respuesta

14

Utilice el nombre completo de la función gratuita.

::foo(); 

El :: delante del nombre de la función, le dice al compilador a llamar a la función con el nombre foo() que es en el ámbito global.
Si la función libre foo()era en algún otro espacio de nombres debe usar un nombre totalmente calificado que especifique el espacio de nombres.

namespacename::foo(); 
1

Si la función libre foo se define en cierto espacio de nombres xyz, entonces esto:

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

o bien simplemente hacer esto:

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

Ésta asume foo se define en el espacio de nombres global.

Es mejor utilizar el espacio de nombres para su implementación. Evite contaminar el espacio de nombres global.

Cuestiones relacionadas