Проследите шаги, предпринятые компилятором, которые привели к ошибке - PullRequest
2 голосов
/ 16 июня 2011

Есть две проблемы, с которыми я иногда сталкиваюсь. Одним из них является утверждение времени компиляции, а другим - заголовочный файл, который странным образом включается в несколько мест (это не мой код, поэтому я не могу исправить , не включив его странным образом. Даже если я попытался, это заняло бы слишком много часов / дней, поскольку оно глубоко внедрено), например:

class Foo
{
public:
#include "VariableDeclarations.h" // Some file that has all the variables that need to be declared
                                       // which is also included by several other classes in the same way
};

Приведенный выше код является упрощением того, с чем я сейчас имею дело. Конечно, класс Foo занимается и другими вещами.

Теперь, если в этом случае я добавлю еще одно объявление переменной в заголовок, а файл Class Foo не знает о типе, я получу ошибку компиляции. Чтобы это исправить, я включаю необходимые заголовки. Проблема в том, что все, что мне говорит компилятор, это "необъявленный идентификатор" , а имя файла выглядит как VariableDeclarations.h. Я хотел бы знать, какой файл включает в себя объявления и, следовательно, не знал о типе, который я только что добавил.

То же самое происходит с утверждениями времени компиляции. У меня нет никаких указаний относительно того, какая строка / файл вызвал ошибку. Это просто дает мне ошибку (например, в математической библиотеке Eigen, я много испытывал это).

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

В g ++ вы можете использовать подробный параметр -v. Для intel тот же флаг -v должен работать. Для MSVC есть опция проекта, которую можно настроить где-то в одном из параметров сборки: Как сделать сборку Visual Studio очень многословной?

1 голос
/ 16 июня 2011

Знак фунта препроцессора (#) должен быть символом first в строке для его обработки, и конечного ; там тоже быть не должно:

class Foo
{
public:
#    include "VariableDeclarations.h"; // Some file that has all the variables that need to be declared
                                       // which is also included by several other classes in the same way
};

Кроме того, и GCC, и MSVC имеют переключатель для запуска только препроцессора и отображения сгенерированного файла. Это отличный инструмент для отладки такого рода вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...