VSCode 中的“致命错误:QUdpSocket:没有这样的文件或目录”

问题描述 投票:0回答:1

我正在努力处理我的 C++ 代码,因为我对大型项目和 CMake 的使用有点陌生。

我遇到了编译问题,我不知道如何解决它,因为网上所有的解决方案都使用 QtCreator,但我使用的是 VS Code。

编译问题

In file included from /home/icksir/Documentos/robocup/sysmic-project/libs/vision/src/main.cpp:1:
/home/icksir/Documentos/robocup/sysmic-project/libs/vision/src/../include/vision.hpp:3:10: fatal error: QUdpSocket: No existe el archivo o el directorio
    3 | #include <QUdpSocket>
      |          ^~~~~~~~~~~~
compilation terminated.
make[2]: *** [libs/vision/src/CMakeFiles/main.dir/build.make:76: libs/vision/src/CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:192: libs/vision/src/CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

我的项目

.
├── build
├── CMakeLists.txt
├── libs
│   ├── behavior
│   ├── communication
│   ├── navigation   
│   ├── planning  
│   ├── referee    
│   ├── trainer     
│   └── vision
│       ├── CMakeLists.txt
│       ├── docs
│       │   └── requirements.txt
│       ├── external
│       │   ├── CMakeLists.txt
│       │   ├── proto
│       │   │   ├── messages_robocup_ssl_detection.proto
│       │   │   ├── messages_robocup_ssl_geometry.proto
│       │   │   └── messages_robocup_ssl_wrapper.proto
│       │   └── proto_compiled
│       │       ├── CMakeLists.txt
│       │       ├── messages_robocup_ssl_detection.pb.cc
│       │       ├── messages_robocup_ssl_detection.pb.h
│       │       ├── messages_robocup_ssl_geometry.pb.cc
│       │       ├── messages_robocup_ssl_geometry.pb.h
│       │       ├── messages_robocup_ssl_wrapper.pb.cc
│       │       └── messages_robocup_ssl_wrapper.pb.h
│       ├── include
│       │   ├── CMakeLists.txt
│       │   └── vision.hpp
│       ├── src
│       │   ├── CMakeLists.txt
│       │   ├── main.cpp
│       │   └── vision.cpp
│       └── tools
│           └── protobuf.bash
├── LICENSE
└── README.md

vision.hpp

#ifndef VISION_H
#define VISION_H
#include <QUdpSocket>
#include <QObject>
#include "messages_robocup_ssl_wrapper.pb.h"

class Vision: public QObject{
    Q_OBJECT

    public:
        explicit Vision(QObject *parent);
        void initSocket();
        int port_grsim = 10020;
        void processPendingDatagrams();
        SSL_WrapperPacket packet;

    private:
        QUdpSocket *socket=nullptr;
};

#endif

vision.cpp

#include "vision.hpp"

Vision::Vision(QObject *parent) : 
    QObject(parent) {
}

void Vision::initSocket(){
    socket = new QUdpSocket(this);
    bool result =  socket->bind(QHostAddress::LocalHost, this->port_grsim);
    if(result){
        qDebug() << "Socket PASS";
    }
    else{
        qDebug() << "Socket FAIL";
    }

    processPendingDatagrams();
    connect(socket, &QUdpSocket::readyRead, this, &Vision::processPendingDatagrams);
}

void Vision::processPendingDatagrams(){
    qDebug() << "in !";
    QHostAddress sender;
    quint16 port;
    while (socket->hasPendingDatagrams())
    {
        QByteArray datagram;
        datagram.resize(socket->pendingDatagramSize());
        socket->readDatagram(datagram.data(),datagram.size(),&sender,&port);
        qDebug() <<"Message From :: " << sender.toString();
        qDebug() <<"Port From :: "<< port;
        qDebug() <<"Message :: " << datagram;
    }
}

CMakeLists.txt位于/vision/src

project(SysmicEngine)

add_library(Vision vision.cpp)

#public: quien tenga acceso a Vision tiene acceso a los includes
target_include_directories(Vision
    PUBLIC 
    ${CMAKE_CURRENT_SOURCE_DIR}/../include
    ${CMAKE_CURRENT_SOURCE_DIR}/../external/proto_compiled)

find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(Vision PRIVATE Qt6::Network)

add_executable(main main.cpp)

target_link_libraries(main
    PRIVATE
    Vision
)

我不知道还需要什么文件。感谢您的帮助!

c++ qt udp
1个回答
0
投票

正如您在

PRIVATE
中使用
target_link_libraries
一样,链接到
Vision
的目标不会继承 Qt 目标的任何设置。要么使用
PUBLIC
,要么您还需要将
main
链接到
Qt6::Network

© www.soinside.com 2019 - 2024. All rights reserved.