gpt4 book ai didi

c++ - 愚蠢的 C++ 语法尚未声明

转载 作者:太空狗 更新时间:2023-10-29 20:13:25 25 4
gpt4 key购买 nike

我正在尝试将最初为 Windows 编写的 Qt C++ 项目交叉编译为嵌入式 Linux。现在这个程序编译查找并在 Windows 上工作,所以这个问题一定是操作系统特定的(我不认为 Qt 代码会发生)或配置相关,但我很难追踪它,因为我没有完全理解 C++ 语法。

我的制作命令:

arm-linux-gnueabihf-g++ -c -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8 -O2 -O3 -Wall -W -D_REENTRANT -DCHL80Net -DPHASE_TO_NEUTRAL -DCHL80NET -DCANLCD_BUILD -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../mkspecs/qws/linux-am335x-g++ -I. -I../include/QtCore -I../include/QtGui -I../include/QtXml -I../include -I. -IApp -IApp/Model/ModelSim -IApp/Model -I. -IPages -IApp/GUI/Widgets -IApp/GUI/Pages -IApp/GUI -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: In member function ‘void CanInterface::closeConnection()’: App/Can/CanInterface.cpp:68:5: error: ‘::close’ has not been declared make: * [.obj/CanInterface.o]
Error 1

这是有问题的代码行:

void CanInterface::closeConnection()
{
::close(m_socket);
m_socket = -1;

一开始我觉得这根本不像有效代码,但我不太了解 C++,所以我不得不做一点研究,看起来像这样 ::function() 语法是为了确保解析发生在全局命名空间而不是本地命名空间。

所以我要找出的是什么 namespace 应该声明此 close() 函数。如果我对这段代码的理解是正确的,那么我不需要在 CanInterface 类中查找未声明的函数,但它是父类?

CanInterface 类的头文件中,我发现了这个:

class CanInterface : public QObject 
{
Q_OBJECT

认为 意味着它继承自 QObject 类。所以:

  1. 我走在正确的轨道上吗?
  2. 我怎么知道我是否需要查看 QObject 类以查找缺少的 close() 函数,或者我是否需要继续向上? ::close 是否以某种方式告诉我需要搜索多少层嵌套类?
  3. 关于进一步调查此问题的任何其他想法或提示?

最佳答案

你是对的,因为 ::some_function() 从全局范围调用了一个函数。

这包括所有 C 库或系统函数。您可以使用 man 在 *nix 系统上查找全局函数,例如

man close

在我的 Ubuntu 上运行

NAME
close - close a file descriptor

SYNOPSIS
#include <unistd.h>

int close(int fd);

因此,要修复编译错误,您必须在 C++ 源代码或周围的头文件中的某处包含 unistd.h

当您用谷歌搜索 man close 时,您可以获得相同的信息。 ,例如http://linux.die.net/man/2/close

关于c++ - 愚蠢的 C++ 语法尚未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21581682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com