Quick update:
After I wrote this post i tried something i didn't do before. I had a working overload in another class that worked so and the only difference was that the definition was in the header file and the actual function was in the .cpp file. When i tested what happend when i moved the code to the header file i got the same error, so apparently you cant write the code of the overloaded function in the header file. When i applied this to my problem the errors went away.
Hello there,
I am trying to overload the << operator of QDataStream so I can use it with one of my own classes. Now the first problem that i have is that the classes are inherited classes.
I have AbstractPostItem which is the base class and PostDataItem and PostHeaderItem that inherited AbstractPostItem.
I first tried to implement the overloaded function in all the classes but that didn't work. I know have one overloaded function in AbstractPostItem that looks like this:
QDataStream& operator<<(QDataStream& out, const AbstractPostItem& outputItem)
{
return outputItem.saveData(out);
}
QDataStream& operator<<(QDataStream& out, const AbstractPostItem& outputItem)
{
return outputItem.saveData(out);
}
To copy to clipboard, switch view to plain text mode
It calls saveData which looks like this:
virtual QDataStream& saveData(QDataStream& out) const
{
out << childItems;
return out;
}
virtual QDataStream& saveData(QDataStream& out) const
{
out << childItems;
return out;
}
To copy to clipboard, switch view to plain text mode
This function is implemented in all the classes.
But know when i try to compile the code i get some strange error:
mingw32-make: Leaving directory `G:/projects/Post_Program'
./debug/mainwindow.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/arch/qatomic_i386.h:125: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/main.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/arch/qatomic_i386.h:125: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/newpost.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/postmodel.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/postheaderitem.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/postdataitem.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_postview.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_mainwindow.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_newpost.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_postmodel.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug/Post_Program.exe] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project Post_Program (target: Desktop)
When executing build step ''
mingw32-make: Leaving directory `G:/projects/Post_Program'
./debug/mainwindow.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/arch/qatomic_i386.h:125: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/main.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/arch/qatomic_i386.h:125: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/newpost.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/postmodel.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/postheaderitem.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/postdataitem.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_postview.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_mainwindow.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_newpost.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
./debug/moc_postmodel.o: In function `ZlsR11QDataStreamRK16AbstractPostItem':
e:/Qt/2010.01/qt/include/QtCore/../../src/corelib/global/qglobal.h:1368: multiple definition of `operator<<(QDataStream&, AbstractPostItem const&)'
./debug/postview.o:G:\projects\Post_Program/./abstractpostitem.h:100: first defined here
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug/Post_Program.exe] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project Post_Program (target: Desktop)
When executing build step ''
To copy to clipboard, switch view to plain text mode
It is talking about multiple definitions but i cant find the multiple definition, when i look on line 1368 in qglobal is says :
inline void qt_noop() {}
inline void qt_noop() {}
To copy to clipboard, switch view to plain text mode
So i have no idea where my multiple definition is.
Hope you guys can help me.
Marcel
Bookmarks