愚蠢的C++;语法尚未声明 我试图尝试一个Qt C++项目,最初是为Windows编写的,并将其编译为嵌入式Linux。现在这个程序编译Windows上的查找和工作,所以这个问题必须是OS特定的(我认为QT代码不可能发生)或者配置相关,但是我很难跟踪它,因为我不完全理解C++语法。

愚蠢的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

我的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]
错误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()/<代码>是用来调用相同的函数。谢谢输入。我想我把
    等同于
    ,并认为这将是“上一级”,而不是字面上的“最高级”函数调用。这是一个非常有用的解释。