最近,我在 mac os 上编译 libfacebookcpp。我发现了一个我无法理解的奇怪用法。有两个文件,AuthorizedObject.hpp 和 List.hpp。在 AuthorizedObject.hpp 文件的末尾,有一行:#include "List.hpp"。现在我编译成功了。但是当我将该行移到开头时,就会发生错误。代码的骨架是:
//AuthorizedObject.hpp
class AuthorizedObject
{
public:
...
template<class TType>
void _GetConnection(const ::std::string& uri, List<TType> *list) const
{
LIBFACEBOOKCPP_CHKARG(list);
Json::Value value;
request_->GetResponse(uri, &value);
list->Deserialize(*this, value);
}
...
}
#include "List.hpp" //end
----------------------------------------------------------
//List.hpp
#include "AuthorizedObject.hpp"
class LIBFACEBOOKCPP_API List : public AuthorizedObject
{
private: // private classes
...
}
我猜如果把那行(#include "List.h")放在 AuthorizedObject.hpp 的开头,这两个文件按圆圈相互包含。所以编译器不知道怎么编译。但是把那行放在最后会解决这个问题吗?为什么?先感谢您。