Компилятор, компилирующий внешние, включает - PullRequest
0 голосов
/ 10 ноября 2009

У меня небольшая проблема в моем проекте. У меня есть сборка статической библиотеки (например, test.lib). Включил его в мой бинарный компоновщик проекта и включил #include "test.h" в stdafx.h. Но когда двоичный файл начинает собираться, ошибка C возникает при CSomeObject тесте:

"ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором 'test' ".

Что может быть не так? Я также включил в свой бинарный проект CSomeObject.h? Также может кто-нибудь объяснить, как работает компилятор с include? Спасибо заранее:)

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009

Похоже, вы не включаете все, что нужно включить, или у вас неправильно сформировано объявление класса / структуры.

Иногда этот тип ошибки генерируется, потому что идентификатор прямо перед test - это то, о чем компилятор ничего не знает, поэтому он обрабатывает оператор с test как объявление для этого идентификатора вместо test. Затем, когда он видит test, это синтаксическая ошибка.

Итак, если у вас есть строка:

CSomeObject test;

но компилятор ничего не знает о CSomeObject, вы получите сообщение об ошибке.

Вы также увидите проблему с чем-то вроде следующего:

class CSomeObject {

    // ...

} // there's a missing semi-colon here

CSomeObject test;

потому что происходит то, что второй CSomeObject является экземпляром class CSomeObject, а `test является ложной синтаксической ошибкой.

Чтобы синтаксически исправить, это должно выглядеть так:

class CSomeObject {

    // ...

};  // note the semi-colon...

CSomeObject test;
0 голосов
/ 10 ноября 2009

В вашем классе CSomeObject отсутствует символ ";" в конце объявления класса, то есть после последней закрывающей скобки ("}") в заголовочном файле?

...