Visual Studio 2017 "использование неопределенного типа" - PullRequest
0 голосов
/ 05 марта 2020

У меня есть следующий код, который не компилируется с 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 и как это исправить? Есть ли какие-либо изменения в правилах между VS 2015 и VS 2017?

1 Ответ

2 голосов
/ 05 марта 2020

Ошибки, которые я получаю от clang и g cc для этого примера, более ясны:

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 {...};, чтобы компилятор мог видеть определение типа.

...