例如,在使用OpenCV时,我们指定
using namespace cv;
但是C ++在哪里看不清楚它的定义?
答案 0 :(得分:2)
using namespace
不会使该命名空间中声明的所有内容都可见。它只会暴露翻译单元“看到”的内容。
请考虑以下代码
One.h
#pragma once
namespace ns
{
void function1();
}
Two.h
#pramga once
namespace ns
{
void function2();
}
的main.cpp
#include "Two.h" // <-- included only Two.h
using namespace ns;
int main()
{
function2(); // <-- is a ns::function2() located in Two.h
function1(); // <-- error compiler does not know where to search for the function
return 0;
}
这里发生的是编译器创建的翻译单元,其中所有预处理器指令都已解析。它看起来像这样:
namespace ns
{
void function2();
}
using namespace ns;
int main()
{
function2(); // <-- OK. Declaration is visible
function1(); // <-- Error. No declaration
return 0;
}
答案 1 :(得分:1)
C ++如何知道在哪里查找使用
using namespace …
指定的命名空间?
它没有。
使用时
using namespace cv;
扩展了名称(类,函数,变量,枚举等)的搜索范围。除了通常搜索它们的其他范围外,还会在cv
命名空间中搜索名称。