8

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

主文件

#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.对不起我的英语不好。

4

2 回答 2

15

使用自由函数的完全限定名称。

::foo();

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

namespacename::foo();
于 2012-05-27T06:50:00.573 回答
1

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

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

否则就这样做:

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

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

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

于 2012-05-27T06:52:29.913 回答