I'm trying to write a very simple program that makes use of QSharedDataPointer and QSharedData.
Here is my class:
#ifndef BUILDING_H
#define BUILDING_H
#include <QSharedData>
#include <QSharedDataPointer>
class BuildingPrivate;
class Building
{
public:
Building();
~Building();
int value() const;
void setValue(int value);
private:
QSharedDataPointer<BuildingPrivate> d;
};
#endif // BUILDING_H
#ifndef BUILDING_H
#define BUILDING_H
#include <QSharedData>
#include <QSharedDataPointer>
class BuildingPrivate;
class Building
{
public:
Building();
~Building();
int value() const;
void setValue(int value);
private:
QSharedDataPointer<BuildingPrivate> d;
};
#endif // BUILDING_H
To copy to clipboard, switch view to plain text mode
#include "building.h"
public:
BuildingPrivate() {
value = 0;
}
BuildingPrivate(const BuildingPrivate &other) {
value = other.value;
}
~BuildingPrivate() {}
int value;
};
Building::Building()
: d(new BuildingPrivate)
{
}
Building::~Building() { }
int Building::value() const
{
return d->value;
}
void Building::setValue(int value)
{
d->value = value;
}
#include "building.h"
class BuildingPrivate : public QSharedData {
public:
BuildingPrivate() {
value = 0;
}
BuildingPrivate(const BuildingPrivate &other) {
value = other.value;
}
~BuildingPrivate() {}
int value;
};
Building::Building()
: d(new BuildingPrivate)
{
}
Building::~Building() { }
int Building::value() const
{
return d->value;
}
void Building::setValue(int value)
{
d->value = value;
}
To copy to clipboard, switch view to plain text mode
And here is my main.cpp:
#include <QtCore/QCoreApplication>
#include <QDebug>
#include "myobject.h"
Building build() {
Building test;
test.setValue(888);
return test;
}
int main(int argc, char *argv[])
{
qDebug() << build().value();
return 0;
}
#include <QtCore/QCoreApplication>
#include <QDebug>
#include "myobject.h"
Building build() {
Building test;
test.setValue(888);
return test;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << build().value();
return 0;
}
To copy to clipboard, switch view to plain text mode
When I try to compile that I get:
In
file included from
/usr
/include
/qt4
/QtCore
/QSharedData:2,
from building.h:5,
from myobject.h:6,
from main.cpp:5:
/usr
/include
/qt4
/QtCore
/qshareddata.
h: In copy constructor ‘QSharedDataPointer<T>
::QSharedDataPointer(const QSharedDataPointer<T>
&) [with T
= BuildingPrivate
]’
: building.h:10: instantiated from here
/usr/include/qt4/QtCore/qshareddata.h:90: error: invalid use of incomplete type ‘struct BuildingPrivate’
building.h:7: error: forward declaration of ‘struct BuildingPrivate’
/usr
/include
/qt4
/QtCore
/qshareddata.
h: In destructor ‘QSharedDataPointer<T>
::~
QSharedDataPointer() [with T
= BuildingPrivate
]’
: building.h:10: instantiated from here
/usr/include/qt4/QtCore/qshareddata.h:87: error: invalid use of incomplete type ‘struct BuildingPrivate’
building.h:7: error: forward declaration of ‘struct BuildingPrivate’
/usr/include/qt4/QtCore/qshareddata.h:87: warning: possible problem detected in invocation of delete operator:
/usr/include/qt4/QtCore/qshareddata.h:87: warning: invalid use of incomplete type ‘struct BuildingPrivate’
building.h:7: warning: forward declaration of ‘struct BuildingPrivate’
/usr/include/qt4/QtCore/qshareddata.h:87: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.
make: *** [main.o] Error 1
In file included from /usr/include/qt4/QtCore/QSharedData:2,
from building.h:5,
from myobject.h:6,
from main.cpp:5:
/usr/include/qt4/QtCore/qshareddata.h: In copy constructor ‘QSharedDataPointer<T>::QSharedDataPointer(const QSharedDataPointer<T>&) [with T = BuildingPrivate]’:
building.h:10: instantiated from here
/usr/include/qt4/QtCore/qshareddata.h:90: error: invalid use of incomplete type ‘struct BuildingPrivate’
building.h:7: error: forward declaration of ‘struct BuildingPrivate’
/usr/include/qt4/QtCore/qshareddata.h: In destructor ‘QSharedDataPointer<T>::~QSharedDataPointer() [with T = BuildingPrivate]’:
building.h:10: instantiated from here
/usr/include/qt4/QtCore/qshareddata.h:87: error: invalid use of incomplete type ‘struct BuildingPrivate’
building.h:7: error: forward declaration of ‘struct BuildingPrivate’
/usr/include/qt4/QtCore/qshareddata.h:87: warning: possible problem detected in invocation of delete operator:
/usr/include/qt4/QtCore/qshareddata.h:87: warning: invalid use of incomplete type ‘struct BuildingPrivate’
building.h:7: warning: forward declaration of ‘struct BuildingPrivate’
/usr/include/qt4/QtCore/qshareddata.h:87: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.
make: *** [main.o] Error 1
To copy to clipboard, switch view to plain text mode
What am I missing?
Bookmarks