调用同名函数

时间:2012-05-27 06:46:03

标签: c++ class function include duplicates

是否可以从Foo.cpp调用foo()函数 不将函数名Foo :: foo()更改为Foo :: newfoo()。

的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.appry我可怜的英语。

2 个答案:

答案 0 :(得分:14)

使用免费功能的完全限定名称。

::foo();

函数名前面的::告诉编译器通过全局范围内的名称foo()调用该函数。
如果某个其他名称空间中的自由函数foo() ,则需要使用指定名称空间的完全限定名称。

namespacename::foo();

答案 1 :(得分:1)

如果在某个命名空间foo中定义了自由函数xyz,那么执行以下操作:

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

或者只是这样做:

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

这假设foo在全局命名空间中定义。

最好为您的实现使用命名空间。避免污染全局命名空间。