假装我打开了一个emacs窗口,它被水平拆分为三个缓冲区:
===== BUFFER1.cpp ======
#include "CommonTypeDefs.h"
namespace NS1 {
...
void someFunction( void ) {
MyClassHandle mh = getMyClassHandle(); // getMyClassHandle(): returns a MyClassHandle
mh-> // SEMANTIC does not parse
...
-
===== CommonTypeDefs.h ======
...
typedef class NS2::MyClass* MyClassHandle
...
-
===== BUFFER2.h ======
namespace NS2 {
...
class MyClass {
// things in here
...
-
我不明白为什么这个额外的图层(在这种情况下是一个充满typedef的公共头文件)没有获得可能的完成。
-
我还注意到,当语义工作时,我会看到类定义的行,例如:
-
===== BUFFER1.h ======
SomeDe[]finedClass* sdc = getSomeDefinedClassPtr();
-
如果我将光标放在sdc类型上(参见方括号),Emacs迷你缓冲区会说些什么
喜欢:
-
SomeDefinedClass.h: class SomeDefinedClass {}
-
这意味着我知道Semantic将能够解析SomeDefinedClass中的符号。发生这种情况时一切都很好,因为没有涉及typedef。但是,在事情不起作用的情况下:
-
===== BUFFER1.h ======
SomeDe[]finedClassHandle sdch = getSomeDefinedClassHandle();
-
同样,我有方括号的光标,但这次迷你缓冲区说:
-
CommonTypeDefs.h: typedef* SomeDefinedClassHandle {}
-
我想这是有道理的,因为首先这个类型是一个typedef,但似乎语义停在那里 - 而不是说,好吧:我是一个typedef,但现在我需要查看typedef的符号。因此,我没有完成。-
我已经确认已解析所有内容,因为我已启用 -decoration-mode 。此外,语义对其他事物起作用,它似乎无法处理这些句柄。
由于没有编译错误,因此缺少包含没有问题。在这个项目中有许多子系统,因此我将不同的目录包含在system-c-dependency-include *路径中,这些都可以正常工作。
为什么这不起作用?
Emacs 24.3 / Windows / CEDET(2014年9月26日bzr发布)