Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QObject双删除_C++_Qt_Qobject - Fatal编程技术网

C++ QObject双删除

C++ QObject双删除,c++,qt,qobject,C++,Qt,Qobject,我目前正在Mac OS X 10.6上运行Qt 4.7.4。我使用MacPorts安装了Qt 我一直在尝试使用测试驱动的开发作为我的编码实践的一部分,为此我正在使用QtTest。我有一个从QObject派生的类,当我尝试测试代码时,当它应该通过时,测试失败。我查看了(test-vs)的输出,发现以下错误: 信息:periodictable::ElementTest::testName()信号:QObject(7fff5fbfd860)已销毁((QObject*)7fff5fbfd860) 在一个

我目前正在Mac OS X 10.6上运行Qt 4.7.4。我使用MacPorts安装了Qt

我一直在尝试使用测试驱动的开发作为我的编码实践的一部分,为此我正在使用QtTest。我有一个从QObject派生的类,当我尝试测试代码时,当它应该通过时,测试失败。我查看了(test-vs)的输出,发现以下错误:

信息:periodictable::ElementTest::testName()信号:QObject(7fff5fbfd860)已销毁((QObject*)7fff5fbfd860)

在一个测试用例中,我观察上述错误两次,将实际测试夹在中间。这表示子对象在使用前已销毁,在测试后似乎再次删除。我已使用QPointer并确认该对象在使用前无效。另一种方法是在每个测试用例中初始化变量,从而破坏单次初始化的目的,进而增加代码膨胀

class Element : public QObject
{
   Q_OBJECT
   Q_PROPERTY(QString name READ name WRITE setName NOTIFY valueChanged)
public:
   Element(QObject* parent = 0) : QObject(parent) {}
   void setName(const QString& name);
   QString name() const;
Q_SIGNALS:
   void valueChanged(QString value);
private:
   QString elementName;
   Q_DISABLE_COPY(Element);
};
我使用以下命令(通过cmake):

g++-D_-FORTIFY_SOURCE=2-D_GLIBCXX_FULLY_DYNAMIC_STRING-D_-FORTIFY_SOURCE=2-DQT_TEST_LIB-DQT_CORE_LIB-DQT_DEBUG-Wformat security-Wmissing format属性-Wformat=2-Wctor dtor privacy-Wabi-Woverloaded virtual-Wsign-promoto-Wformat nonliteral-Wdisabled优化-Wformat-wisabled优化-Wformat-y2k-Winit自有效pch-Wunsafe循环优化-Wmissing format属性-Wmissing include dirs-Wstrict aliasing=3-Wswitch enum-Wvariadic macros-Wvolatile register var-std=gnu++0x-fmessage length=0-ftree vectorize--param max unroll times=4-pipe-fabi version=4-g-I/opt/local/include/QtCore-fPIC-fstack protector-fPIC-fstack protector-Wstack protector-Wstack protector

我不记得Qt4.6遇到过这个问题,我对过早破坏感到困惑

我认为这不是Qt中的一个bug,但我很好奇是否有其他人遇到过这样的问题并找到了解决方案。我喜欢Qt,但这个问题不限于单元测试。任何帮助都将不胜感激

--编辑--

测试用例的源代码:

在.h文件中

#ifndef  TEST_ELEMENT_H
#define  TEST_ELEMENT_H

#include    <QtCore/QObject>
#include    <QtCore/QPointer>

namespace hashtable
{

class Element;                                  // Forward declaration

class ElementTest : public QObject
{
    Q_OBJECT
private Q_SLOTS:
    void initTestCase();

    void testName();

private:
    QString name;
    QPointer<Element> element;
};

}
#endif
\ifndef测试元素\u H
#定义测试元素
#包括
#包括
名称空间哈希表
{
类元素;//转发声明
类元素测试:公共QObject
{
Q_对象
专用Q_插槽:
void initTestCase();
void testName();
私人:
QString名称;
指针元件;
};
}
#恩迪夫
在.cpp文件中

void ElementTest::initTestCase()
{
    name = QString("Hydrogen");
    mass = 1.008;
    QPointer<Element> element(new Element(this));
    return;
}

void ElementTest::testName()
{

    element->setProperty("name", name);
    QCOMPARE(element->property("name").toString(), name);
}
void ElementTest::initTestCase()
{
名称=QString(“氢”);
质量=1.008;
QPointer元素(新元素(本));
返回;
}
void ElementTest::testName()
{
元素->设置属性(“名称”,名称);
QCOMPARE(元素->属性(“名称”).toString(),名称);
}

元素测试::initTestCase()中的这一行


你能给我们看一下这个课程的测试代码吗?谢谢你的快速回复。我应该意识到这会创造一个暂时的价值。这些小错误被忽视了。
QPointer<Element> element(new Element(this));
element = new Element(this);