从QT4转换到QT5导致编译错误;c2666



我的项目在qt4上运行良好,现在我想在qt5上运行它。

我已经修复了大部分的差异,但我仍然得到错误:c2666: QByteArray::operater == ': 11 overloads have similar conversions.

我该如何修复它?

代码:

h文件:

#ifndef A_H
#define A_H
#include <QObject>
class a
{
public:
    explicit a();
    QByteArray arr;
    int validate();
signals:
public slots:
};
#endif // A_H

on CPP file:

#include "a.h"
int a::validate()
{
    a* p = new a();
    if(p->arr == NULL)
        return 0;
    return 1;
}

错误出现在这行:"if(p->arr == NULL)"

if(p->arr == NULL)

那是不行的。arr在这里不是指针,也不是整数,所以不能是NULL

您可以使用QByteArray

中的isNull()方法
if (p->arr.isNull())

或写

if (p)

取决于您的场景,您是否希望检查正确的构造或内存分配失败。

同样,您正在尝试在没有Q_OBJECT宏的类中使用槽,并且该类也没有继承QObject。这也是错误的。槽不是任何单个c++类的通用c++特性。是一个Qt扩展。

此外,您可能不希望将arr成员设为公共,因为在类中将成员变量设为公共是不寻常的。通常,它们可以通过成员方法访问。

最新更新