想象一下这段代码:
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一起使用? 抱歉我的英语不好:)
我收到了几个错误,其中一个错误是CodeList & children() { return m_Children; }
处的“缺少类型说明符 - 假定为int”
我假设编译器在处理Code类中的CodeList成员时不处理typedef CodeList,但我不明白为什么它适用于第一种情况。如果我写下以下内容:
class Code;
typedef qx::QxCollection<long, QSharedPointer<Code>> CodeList;
class QX_SERVICE_DLL_EXPORT Code
{
...
然后一切正常。 顺便说一下,我正在使用MSVC 2010编译器
答案 0 :(得分:9)
这是错误的:
typedef CodeList qx::QxCollection<long, QSharedPointer<Code> >;
你的意思是:
typedef qx::QxCollection<long, QSharedPointer<Code> > CodeList;
我很确定编译器应该在该行代码中提供了错误消息,因此我建议读取错误消息。如果没有,那么您可能没有包含声明typedef的标头... include it 。此外,在声明它的标题中,你无法在之前使用它(C ++进程从上到下,或者大多数情况下至少......)
答案 1 :(得分:2)
将typedef
置于类定义之前的某处,并将qx::QxColl…etc
与CodeList
交换:
typedef qx::QxCollection<long, QSharedPointer<Code> > CodeList;
class QX_SERVICE_DLL_EXPORT Code {
...
};