是否可以从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我可怜的英语。
答案 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
在全局命名空间中定义。
最好为您的实现使用命名空间。避免污染全局命名空间。