错误 C2062:QT 中的信号声明中出现意外类型“void”

Posted

技术标签:

【中文标题】错误 C2062:QT 中的信号声明中出现意外类型“void”【英文标题】:error C2062: type 'void' unexpected in signal declaration in QT 【发布时间】:2018-06-28 05:46:44 【问题描述】:

我是一个新手,我正在编写一个头文件,我在其中声明一个将发出信号的类。所以我用一个构造函数声明我的类,两个int 变量,我创建private,然后我定义我的signal。这是我的.h 文件:

#ifndef KEYBOARD_H
#define KEYBOARD_H

class KeyBoard
public:
    KeyBoard();
    int keyboard_update();
private:
    int level;
    int sub_level;
signals:
    void send_to_MBU(QString message);
;

#endif

现在在.cpp 部分,我只是在构造函数中发出一个信号。这是.cpp 部分中的代码:

#include "KeyBoard.h"

KeyBoard::KeyBoard()

    level = 0;
    sub_level = 0;
    emit send_to_MBU("PRESS ENTER TO SELECT TRAIN"): 


int KeyBoard::keyboard_update()

    return 1;

但是当我编译我的代码时,我的信号声明中出现了这个错误:

error C2062: type 'void' unexpected

对我来说,代码看起来不错。但作为新手。我无法弄清楚这个问题。所以,请帮我解决这个问题。

【问题讨论】:

您可能缺少一个标头,该标头执行使signals: 发挥作用的魔法。 我们开始吧。 From QT Documentation: "所有包含信号或槽的类必须在其声明的顶部提及Q_OBJECT。它们还必须(直接或间接)派生​​自QObject" @user4581301 :谢谢,我缺少#include 来声明。它现在正在工作 【参考方案1】:

需要在.h文件中声明#include <QObject>才能在QT中成功使用信号。这是头文件中唯一缺少的东西。新代码如下所示:-

#ifndef KEYBOARD_H
#define KEYBOARD_H

#include <QObject>

class KeyBoard : QObject
    Q_OBJECT
public:
    KeyBoard();
    int keyboard_update(char* recieved_key);
private:
    int level;
    int sub_level;
signals:
    void send_to_MBU(QString message);
;

#endif

【讨论】:

以上是关于错误 C2062:QT 中的信号声明中出现意外类型“void”的主要内容,如果未能解决你的问题,请参考以下文章

Qt 信号槽

Qt 应用程序在分叉到后台时意外收到 HUP 信号

测试目标中的程序中出现意外的“@”

java - 错误不兼容类型:意外返回值 - 遍历列表

QT 信号与槽 中传递自定义数据类型

出现意外错误类型 = 内部服务器错误,状态 = 500