sohler
05-07-2005, 12:10
Hallo,
ich habe eine Klasse MyObject definert. Diese hat als privaten Member eine QValueList von ListItems. Beide Klassen sind in einer seperaten DLL.
Beim kompilieren kommt die Warning:
warning C4251: 'm_List' : class 'QValueList<class ListItem>' needs to have dll-interface to be used by clients of class 'MyObject'
Googlen hat ergeben, dass man für die QValueList auch ein DLL-Interface erstellen muss.
Also habe ich jetzt folgenden Code:
#ifdef GEN_DLL_EXPORT
#define DLL_EXPORT __declspec (dllexport)
#else
#define DLL_EXPORT __declspec (dllimport)
#endif
class DLL_EXPORT ListItem
{
...
};
class DLL_EXPORT MyObject
{
public:
...
private:
QValueList<ListItem> m_List;
};
// MOC_SKIP_BEGIN
template class DLL_EXPORT QValueList<ListItem>;
// MOC_SKIP_END
Jetzt kommt aber der Fehler:
error C2678: binary '==' : no operator defined which takes a left-hand operand of type 'const class ListItem' (or there is no acceptable conversion)
Der Fehler verschwindet, wenn ich den geforderten Operator selber außerhalb der Klasse implementiere:
inline bool operator==(const ListItem& a, const ListItem& b)
{
...
}
Die Fragen sind jetzt:
Warum muss ich den Operator== selber implementieren? Warum wird nicht der Standard-Operator== (bitweiser Vergleich) genommen?
Warum muss ich für die "normale" Verwendung der QValueList diesen Operator nicht selber implementieren?
Gruß,
S.Ohler
ich habe eine Klasse MyObject definert. Diese hat als privaten Member eine QValueList von ListItems. Beide Klassen sind in einer seperaten DLL.
Beim kompilieren kommt die Warning:
warning C4251: 'm_List' : class 'QValueList<class ListItem>' needs to have dll-interface to be used by clients of class 'MyObject'
Googlen hat ergeben, dass man für die QValueList auch ein DLL-Interface erstellen muss.
Also habe ich jetzt folgenden Code:
#ifdef GEN_DLL_EXPORT
#define DLL_EXPORT __declspec (dllexport)
#else
#define DLL_EXPORT __declspec (dllimport)
#endif
class DLL_EXPORT ListItem
{
...
};
class DLL_EXPORT MyObject
{
public:
...
private:
QValueList<ListItem> m_List;
};
// MOC_SKIP_BEGIN
template class DLL_EXPORT QValueList<ListItem>;
// MOC_SKIP_END
Jetzt kommt aber der Fehler:
error C2678: binary '==' : no operator defined which takes a left-hand operand of type 'const class ListItem' (or there is no acceptable conversion)
Der Fehler verschwindet, wenn ich den geforderten Operator selber außerhalb der Klasse implementiere:
inline bool operator==(const ListItem& a, const ListItem& b)
{
...
}
Die Fragen sind jetzt:
Warum muss ich den Operator== selber implementieren? Warum wird nicht der Standard-Operator== (bitweiser Vergleich) genommen?
Warum muss ich für die "normale" Verwendung der QValueList diesen Operator nicht selber implementieren?
Gruß,
S.Ohler