我得到了一些在 MSVC 上编译良好的代码,我正试图让它在 Xcode 中的 Clang 上编译。我目前遇到使用以下 typedef 重新定义类的问题:
typedef std::map<MyNS::istring, EntityState> Entity;
查看预处理后的输出,我可以看到class Entity
在这个 typedef 之前有两个前向声明。但是, 的实际定义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;
};
}