Представьте себе этот код:
class foo
{
foo fff;
int m_id;
f & work() { return fff; }
};
typedef foo f;
Это хорошо скомпилируется, но вот это:
class QX_SERVICE_DLL_EXPORT Code
{
public:
Code() : m_Id(0) { ; }
virtual ~Code() { ; }
inline long id() const { return m_Id; }
inline void setId(long id) { m_Id = id; }
inline const QString & code() const { return m_Code; }
inline void setCode(const QString & code) { m_Code = code; }
inline const QString & name() const { return m_Name; }
inline void setName(const QString & name) { m_Name = name; }
inline const QSharedPointer<Code> & parent() const { return m_Parent; }
inline void setParent(const QSharedPointer<Code> & parent) { m_Parent = parent; }
CodeList & children() { return m_Children; }
private:
long m_Id;
QString m_Code;
QString m_Name;
QSharedPointer<Code> m_Parent;
qx::QxCollection<long, QSharedPointer<Code>> m_Children;
friend void registerOrm(qx::QxClass<Code> & t);
};
typedef qx::QxCollection<long, QSharedPointer<Code> > CodeList;
Какая разница? Почему он не работает с классом Code и работает с классом foo?
Извините за мой ломаный английский:)
Я получаю несколько ошибок, одна из которых "Отсутствует спецификатор типа - предполагается, что int" на CodeList & children() { return m_Children; }
Я предполагаю, что typedef CodeList не обрабатывается компилятором, когда он обрабатывает члены CodeList в классе Code, но я не понимаю, почему он работает в первом случае. Если я напишу следующее:
class Code;
typedef qx::QxCollection<long, QSharedPointer<Code>> CodeList;
class QX_SERVICE_DLL_EXPORT Code
{
...
Тогда все работает нормально.
Кстати, я использую компилятор MSVC 2010