Hum*_*ant 0 c++ opencv namespaces name-lookup point-cloud-library
:: 是什么意思,前面没有任何东西
::flann::SearchParams param_k_;
Run Code Online (Sandbox Code Playgroud)
我在一个项目上遇到以下错误,但在另一个项目上没有。
error C2079: 'pcl::KdTreeFLANN<pcl::PointXYZ,flann::L2_Simple<float>>::param_radius_' uses undefined struct 'flann::SearchParams'
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我了解一致 :: 的用途以及如何解决问题?
根据 C++ 标准(6.3.6 命名空间范围)
2 命名空间成员也可以在 :: 作用域解析运算符 (8.1) 之后引用,该运算符应用于其命名空间的名称或在 using 指令中指定成员命名空间的名称空间的名称;见 6.4.3.2。
并且全局命名空间没有名称。
所以这个记录
::flann::SearchParams param_k_;
Run Code Online (Sandbox Code Playgroud)
表示flann应该在全局名称空间或其内联名称空间之一中搜索名称。或者,如果未找到名称,则在全局命名空间中搜索在 using 指令中隐式(对于未命名的命名空间)或显式(递归)指定的所有命名空间。
这是一个演示程序
#include <iostream>
int x = 1;
inline namespace N1
{
int y = 2;
}
int main()
{
int x = 10;
int y = 20;
std::cout << "x + ::x = " << x + ::x << '\n';
std::cout << "y + ::y = " << y + ::y << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的输出是
x + ::x = 11
y + ::y = 22
Run Code Online (Sandbox Code Playgroud)
由于全局命名空间的内联命名空间有自己的名字,那么最后一条语句也可以像这样重写
std::cout << "y + N1::y = " << y + N1::y << '\n';
Run Code Online (Sandbox Code Playgroud)
甚至喜欢
std::cout << "y + ::N1::y = " << y + ::N1::y << '\n';
Run Code Online (Sandbox Code Playgroud)
下面有一个更复杂的例子
#include <iostream>
int x = 1;
inline namespace N1
{
int y = 2;
}
namespace
{
int y = 3;
}
int main()
{
int x = 10;
int y = 20;
std::cout << "x + ::x = " << x + ::x << '\n';
std::cout << "y + ::y = " << y + ::y << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
相对于名称的限定名称查找没有歧义,::y因为搜索的第一组名称空间是指定名称空间(在本例中为全局名称空间)及其内联名称空间。在这组命名空间中可以找到名称 y。否则编译器将继续y在全局命名空间的未命名命名空间中搜索名称。
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |