首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用char[] Q_DECLARE_METATYPE声明未签名的Q_DECLARE_METATYPE

使用char[] Q_DECLARE_METATYPE声明未签名的Q_DECLARE_METATYPE
EN

Stack Overflow用户
提问于 2017-08-11 14:03:38
回答 1查看 679关注 0票数 1

我正在尝试用QtTest设置一些单元测试,我想使用QFETCH。

我正在测试以下功能:

代码语言:javascript
复制
static std::vector<bool> FrameHandler::getBitsFromFrame(unsigned char* data, unsigned char length);

它简单地将一个字符数组转换为一个位向量。

所以,我把我的考试课设置成这样:

代码语言:javascript
复制
#include <QtTest/QtTest>
#include <vector>
#include "FrameHandler.h"

class BusTester : public QObject {
    Q_OBJECT

private slots:

    void bytesToVector_data() {
        QTest::addColumn<unsigned char[]>("Tested");
        QTest::addColumn<unsigned char>("Length");
        QTest::addColumn< std::vector<bool> >("Reference");

        // Test for one byte
        std::vector<bool> oneByte(8, false);
        oneByte[0] = true;
        oneByte[1] = true;
        oneByte[3] = true;
        oneByte[4] = true;

        unsigned char oneByteInput[1]{
            0b11011000
        };

        QTest::newRow("One byte") << oneByteInput << 1 << oneByte;
    }

    void bytesToVector() {
        QFETCH(unsigned char[], tested);
        QFETCH(unsigned char, length);
        QFETCH(std::vector<bool>, reference);

        QCOMPARE(FrameHandler::getBitsFromFrame(tested, length), reference);
    }
};

QTEST_MAIN(BusTester)
#include "bustester.moc"

当我这样做时,编译器会说:

代码语言:javascript
复制
expected unqualified-id before ‘[’ token
         QFETCH(unsigned char[], tested);

还包括:

代码语言:javascript
复制
On line `QTest::addColumn<unsigned char[]>("Tested");`, Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system

我认为这两个错误是链接的,所以我在类声明之前添加了Q_DECLARE_METATYPE(unsigned char[]);,但是接下来我得到了以下内容:

qmetatype.h中,“*”令牌之前的token = '>‘>预期(第1695行)

是否可以将unsigned char[]声明为Qt的QMetaType系统?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 14:35:22

Q_DECLARE_METATYPE(T) T型必须是可构造的、可复制的和可破坏的。数组与此规则匹配,但可以创建包装器。

代码语言:javascript
复制
struct Arr
{
    unsigned char arr[SIZE];
};
Q_DECLARE_METATYPE( Arr );

代码语言:javascript
复制
typedef std::array<unsigned char, SIZE> TArr;
Q_DECLARE_METATYPE( TArr );

但是有一个困难--大小,你必须--来声明它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45637151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档