假设以下代码为:
#include <iostream>
using namespace std;
namespace X
{
class A{};
void f(A a){}
void g(int a){}
}
int main()
{
X::A a;
f(a);
g(5);
}
当我编译代码时,出现了以下编译错误:
main.cpp: 在函数'int main()'中:
main.cpp: error: 'g'在此作用域中未声明
所以函数f
被完美编译,但g
没有。这是为什么?它们都属于同一个命名空间。编译器是否从类型为X::A
的参数中推断出函数f
属于X
命名空间?编译器在这种情况下会如何行动?