我有以下代码,无法使用Visual Studio 2017进行编译并出现错误
错误C2027使用未定义类型'A'
但是在Visual Studio 2012和Visual Studio 2015中可以正常编译。
#include <iostream>
class A;
std::string s = typeid(A).name();
class A
{
public:
int a;
};
int main()
{
std::cout << "Hello World!\n";
}
谁能建议VS 2017编译到底有什么问题,以及如何解决此问题?
typeid.cpp:5:17: error: 'typeid' of incomplete type 'A'
std::string s = typeid(A).name();
^
typeid.cpp:4:7: note: forward declaration of 'A'
class A;
class A
是A
类型的前向声明,因此尚不清楚有关该类型的完整信息。我怀疑Visual Studio 2012和2015的行为将被视为非标准行为。您需要将字符串移动到定义class A {...};
之后,以便编译器可以看到类型定义。