最近、Mac OS で libfacebookcpp をコンパイルしていました。理解できない奇妙な使い方を見つけました。AuthorizedObject.hpp と List.hpp の 2 つのファイルがあります。ファイル AuthorizedObject.hpp の最後に、#include "List.hpp" という 1 行があります。これで、正常にコンパイルできました。しかし、その行を先頭に移動すると、エラーが発生します。コードの骨組みは次のとおりです。
//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の先頭に置くと、2つのファイルは円で互いにインクルードされると思います。したがって、コンパイラはコンパイル方法を知りません。しかし、その行を最後に置くと、この問題は解決しますか? なんで?前もって感謝します。