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

时间:2014-05-19 09:27:27

标签: c++ qt qt5

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

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

我该如何解决?

代码:

h file:

#ifndef A_H
#define A_H

#include <QObject>

class a
{
public:
    explicit a();
    QByteArray arr;
    int validate();
signals:

public slots:

};

#endif // A_H

在cpp文件上:

#include "a.h"

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

错误出现在这一行:&#34; if(p-&gt; arr == NULL)&#34;

1 个答案:

答案 0 :(得分:0)

  

if(p-> arr == NULL)

那不行。 arr不是此上下文中的指针,也不是整数,因此它不能是NULL

您可以使用the isNull() method from QByteArray

if (p->arr.isNull())

或写

if (p)

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

此外,您正在尝试在没有Q_OBJECT宏的类中使用插槽,该类也不会继承QObject。那也是错的。插槽不是任何单个C ++类的通用C ++特性。这是Qt扩展。

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