【发布时间】:2014-11-16 13:09:30
【问题描述】:
假设以下代码:
#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: 错误: 'g' 未在此范围内声明
所以函数f 被完美编译,但g 不是。如何?它们都属于同一个命名空间。编译器是否从 X::A 类型的参数中推断出函数 f 属于 X 命名空间?在这种情况下编译器的行为如何?
【问题讨论】:
标签: c++ compiler-errors namespaces argument-dependent-lookup