尚未声明愚蠢的C语法
我正在尝试使用最初为
Windows编写的Qt C项目,并将其交叉编译为嵌入式
Linux.现在这个程序在Windows上编译查找和工作,所以这个问题必须是特定于操作系统的东西(我认为不会发生Qt代码)或配置相关,但我很难跟踪它,因为我没有完全理解C语法.
我的make命令:
错误:
这是有问题的代码行: void CanInterface::closeConnection() { ::close(m_socket); m_socket = -1; 起初我觉得这看起来并不像有效的代码,但我真的不知道C所以我不得不做一些研究,看起来这个:: function()语法是为了确保从全局解决问题命名空间而不是本地命名空间. 所以我想要找出的是命名空间应该声明这个close()函数.如果我对这段代码的理解是正确的,我不需要在CanInterface类中查找未声明的函数,但它是父类? 在CanInterface类的头文件中,我发现了这个: class CanInterface : public QObject { Q_OBJECT 我认为这意味着它来自QObject类的inharents.所以: >我在正确的轨道上吗? 解决方法
C在名称空间中封装名称以避免命名冲突.对于将特定于库的前缀添加到该库中的函数名称的C实践有点类似,例如,C中的my_library_foo()可能在C中被称为my_library :: foo().当::出现在名称的开头时,意味着名称是完全限定的:从全局名称空间开始查找它而不是当前/封闭名称空间,就像绝对(/ etc / passwd /)与相对名称一样. (foo / bar)文件名.
因此,名称:: close旨在解析为全局命名空间中声明的close函数,该函数将通过包含< unistd.h>来放置.在POSIX系统上. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |