愚蠢的C++;语法尚未声明 我试图尝试一个Qt C++项目,最初是为Windows编写的,并将其编译为嵌入式Linux。现在这个程序编译Windows上的查找和工作,所以这个问题必须是OS特定的(我认为QT代码不可能发生)或者配置相关,但是我很难跟踪它,因为我不完全理解C++语法。
我的make命令: arm-linux-gnueabihf-g++-c-march=armv7-a-marm-mthumb互通 -mfloat abi=hard-mfpu=neon-mtune=cortex-a8-O2-O3-Wall-W-D_可重入-DCHL80Net-DPHASE_-TO_-NEUTRAL-DCHL80Net-DCANLCD-BUILD-DQT_-NO_-DEBUG-DQT_-XML-LIB-DQT_-GUI-DQT_-CORE-LIB-DQT_-CORE-LIB-DQT-DQT-u-SHARED-I..-I../mkspecs/linux-am335x-g++-g-I../include/QtCore-I../include/QtCore-I../I../include/GUI/GUI/I../I../include/GUI/I-I.-IPages-IApp/GUI/Widgets-IApp/GUI/Pages-IApp/GUI/Widgets-IApp/GUI/Pages/Util-IApp/GUI/Pages-IApp/Log4Qt-I.obj-o.obj/CanInterface.o App/Can/CanInterface.cpp 错误: App/Can/CanInterface.cpp:在成员函数“void”中 CanInterface::closeConnection()':App/Can/CanInterface.cpp:68:5: 错误:“::close”未声明为make:[.obj/CanInterface.o]愚蠢的C++;语法尚未声明 我试图尝试一个Qt C++项目,最初是为Windows编写的,并将其编译为嵌入式Linux。现在这个程序编译Windows上的查找和工作,所以这个问题必须是OS特定的(我认为QT代码不可能发生)或者配置相关,但是我很难跟踪它,因为我不完全理解C++语法。,c++,qt,inheritance,namespaces,cross-compiling,C++,Qt,Inheritance,Namespaces,Cross Compiling,我的make命令: arm-linux-gnueabihf-g++-c-march=armv7-a-marm-mthumb互通 -mfloat abi=hard-mfpu=neon-mtune=cortex-a8-O2-O3-Wall-W-D_可重入-DCHL80Net-DPHASE_-TO_-NEUTRAL-DCHL80Net-DCANLCD-BUILD-DQT_-NO_-DEBUG-DQT_-XML-LIB-DQT_-GUI-DQT_-CORE-LIB-DQT_-CORE-LIB-DQT-D
错误1 下面是有问题的代码行:
void CanInterface::closeConnection()
{
::close(m_socket);
m_socket = -1;
我起初认为这看起来不像是一个有效的代码,但我不太了解C++,所以我必须做一点研究,看起来这是代码>::函数()//>语法是为了确保从全局命名空间而不是本地命名空间中出现解析。p> 所以我想知道的是,名称空间应该解释这个
close()
函数。如果我对这段代码的理解是正确的,我不需要在CanInterface
类中查找未定义的函数,但它是父类
在CanInterface
类的头文件中,我发现:
class CanInterface : public QObject
{
Q_OBJECT
我认为这意味着它来自QObject
类。因此:
QObject
类以查找缺少的close()
函数,或者是否需要继续向上?:close
是否告诉我需要搜索多少级别的嵌套类?您是正确的,因为
::某些函数()从全局范围调用函数
这包括所有C
库或系统功能。您可以使用man
在*nix系统上查找全局函数,例如:
man close
在我的Ubuntu上
NAME
close - close a file descriptor
SYNOPSIS
#include <unistd.h>
int close(int fd);
名称
关闭-关闭文件描述符
提要
#包括
int关闭(int fd);
< >为了修复编译错误,必须在C++源或周围的头文件中包含<代码> UNISTD .H/COD>某些地方。< /P>
当您搜索时,您可以获得相同的信息,例如,C++将名称封装在名称空间中以避免命名冲突。在C++中,将一个特定于库的前缀添加到该库中的函数名称,例如,C中的“代码> MyLabyRoalIoFoE())/Cuth>可以被称为“Cudith.MyOrth:::FooWoE”/Cuff> C++。当::
出现在名称的开头时,这意味着名称是完全限定的:它是从全局名称空间开始查找的,而不是从当前/封闭的名称空间开始查找的,很像绝对(/etc/passwd/
)与相对(foo/bar
)文件名
因此,名称::close
旨在解析全局名称空间中声明的close函数,通过在POSIX系统上包含
将其放在那里。作为对#3:@John的回答,也许有一天我会有时间阅读更多内容,但现在我只需要完成工作。我是C程序员,这是我的元素之外,我不应该再次触摸C++。我希望……你能在Windows IDE中发现什么是<代码>关闭<代码>吗?.@ OLAFDITESH,他知道C程序中的<代码> CULL()/Cux>,但是不是C++中的代码>::CULL()/<代码>是用来调用相同的函数。谢谢输入。我想我把:
等同于。
,并认为这将是“上一级”,而不是字面上的“最高级”函数调用。这是一个非常有用的解释。