MSVC で問題なくコンパイルできるコードがいくつか与えられており、Xcode の Clang でコンパイルできるようにしようとしています。現在、次の typedef を使用してクラスが再定義されているという問題に遭遇しています。
typedef std::map<MyNS::istring, EntityState> Entity;
前処理された出力を見ると、class Entity
この typedef の前に 2 つの前方宣言があることがわかります。ただし、の実際の定義はclass Entity
前処理された出力にはありませんが、新しいエンティティ マップと同じ名前空間にあります (そうではありませんMyNS
が...)。このエラーの原因は前方宣言ですか? そして、これがMSVCで有効であり、Clangの衒学のために機能しない方法はありますか?
編集:手元にMSVCはありませんが、ここに私が得ているエラーの種類を示すためにまとめたスニペットがあります(すべてが小さなスペースに収まるように定義を簡略化しました)。これにより、Clang でコンパイルしようとしたときに発生するのと同じエラーが発生します。これは MSVC で機能しますか?
namespace TheNS {
class Entity;
struct EntityState
{
std::string aString, anotherString;
int anInt;
EntityState() {}
EntityState(std::string a, std::string b, int i)
{
// constructor
}
};
typedef std::map<std::string, EntityState> Entity;
class Entity
{
public:
void SomeFunction();
private:
int m_aVar;
};
}