命名空间嵌套中定义函数,但是形参类型无法找到命名空间中定义的类,请问这是怎么回事?
刚学习C++,遇到各种让我感觉莫名其妙的问题,请教大家解答疑惑。不知道我描述的是否清晰,请各位大佬不吝赐教。非常感谢。说明:
用的是visual studio 2019
//CamParams.h 头文件包含CamParams类的定义,CamParams类的定义在命名空间SL中
//相应的其他头文件也包含了一些相关类,这些类或函数都是在命名空间SL中定义的
现在我想在SL命名空间中再定义一个命名空间叫做internal,然后在里面定义一个函数叫做frame_process,但是当我写形参列表的时候,有些类并不能自动提示。
其中一个参数是CamParams 类的引用,但是当我写这个参数的时候,并不能自动提示以及补全,我做了以下尝试,有不同的结果。
1.当我的代码如下两种情况时(其一是没有加函数体大括号,其二是加了函数体大括号),参数列表中完全不会提示CamParams这个类,我是想将参数写成 const CamParams cp
void frame_process(const )//第一种情况 void frame_process(const ){}//第二种情况
2.当我的代码如下情况时,也即我加上了SL命名空间,但是没有函数体大括号,此时仍然没有CamParams类的提示,但是有其他类的提示,比如FramePyramid,InSegConfig等类的提示,这些头文件位置和CamParams类是一样的,也都定义在SL命名空间中。也即自动提示的内容不全
void frame_process(const SL::)//第三种情况
3.当我的代码如下情况时,也即我加上了SL命名空间,同时加上函数体大括号以后,接下来有了CamParams的提示,也能自动补全。
void frame_process(const SL::CamParams cp){}//第四种情况
我的疑问,第一,我这些头文件都有包含,而且这些类都是在SL命名空间中定义的,为什么我命名参数的时候还要加上SL::,因为我看到别人的代码就不用加这个命名空间。
第二,为什么函数体大括号没有的时候仅能显示部分内容,而加上大括号后,就可以显示CamParams类的选项了。
不知道我描述的是否清晰,请各位大佬不吝赐教。非常感谢。
以下是整体代码:
程序代码:
#include "CamParams.h" #include "Surfel.h" #include "FramePyramid.h" #include "InSegConfig.h" ... namespace SL { namespace internal { void frame_process(const )//第一种情况 void frame_process(const ){}//第二种情况 void frame_process(const SL::)//第三种情况 void frame_process(const SL::CamParams cp){}//第四种情况 } }
[此贴子已经被作者于2021-12-11 23:00编辑过]