Hej!
Tworzę klasę "SegMem" która musi współpracować ze strumieniami danych.
#include <QDataStream>
#include <QFile>
#include "segmem.h"
SegMem & operator <<(QDataStream &stream, SegMem &segmem){
Q_UNUSED(stream);
return segmem;
}
int main(){
QFile file("out.bin");
file.open(QFile::WriteOnly);
QDataStream stream(&file);
SegMem segmem;
stream << segmem;
file.close();
return 0;
}
W powyższym przykładzie, nie ma znaczenia jak napisana jest klasa SegMem.
Problem pojawia się gdy chcę przerzucić
SegMem & operator <<(QDataStream &stream, SegMem &segmem){
Q_UNUSED(stream);
return segmem;
}
do pliku nagłówkowego segmem.h
segmem.o: In function `operator<<(QDataStream&, SegMem&)':
segmem.h:12: multiple definition of `operator<<(QDataStream&, SegMem&)'
segmem.h:12: first defined here
Czemu występuje wielokrotna definicja?
Rozumiem że jak kilka razy się zainkluduje to ten problem może być (tutaj może jaki moc dodatkowo inkluduje).
Czemu nie ma problemu w analogicznie napisanym qdatastream.h:
/* ... */
template <typename T>
QDataStream& operator<<(QDataStream& s, const QList<T>& l)
{
s << quint32(l.size());
for (int i = 0; i < l.size(); ++i)
s << l.at(i);
return s;
}
/* ... */
Może być wielokrotnie inkludowany z różnych miejsc i działa
:(