Dav*_*ita 1 c++ typedef return reference
想象一下这段代码:
class foo
{
foo fff;
int m_id;
f & work() { return fff; }
};
typedef foo f;
Run Code Online (Sandbox Code Playgroud)
这将编译正常,但这一个:
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;
Run Code Online (Sandbox Code Playgroud)
有什么不同?为什么它不适用于类Code并与类foo一起使用?抱歉我的英语不好:)
我得到了几个错误,其中一个是"Missing type specifier - int CodeList & children() { return m_Children; }
assume ",我假设编译器在处理Code类中的CodeList成员时没有处理typedef CodeList,但我不明白为什么它是为第一个案件工作.如果我写下面的内容:
class Code;
typedef qx::QxCollection<long, QSharedPointer<Code>> CodeList;
class QX_SERVICE_DLL_EXPORT Code
{
...
Run Code Online (Sandbox Code Playgroud)
一切正常.顺便说一下,我正在使用MSVC 2010编译器
这是错的:
typedef CodeList qx::QxCollection<long, QSharedPointer<Code> >;
Run Code Online (Sandbox Code Playgroud)
你可能意味着:
typedef qx::QxCollection<long, QSharedPointer<Code> > CodeList;
Run Code Online (Sandbox Code Playgroud)
我很确定编译器应该在该行代码中提供了错误消息,因此我的建议是读取错误消息.如果没有,那么您可能没有包含声明typedef的标头... 包含它.另外在声明它的标题中,你不能在它被声明之前使用它(C++进程从上到下,或者在大多数情况下至少......)