C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Непонятная ошибка., E2040 Declaration terminated incorrectly
tsl
Отправлено: 16.06.2005, 06:42


Дежурный стрелочник

Группа: Участник
Сообщений: 65



Знанимался разработкой программы. "Никого не трогал." И вдруг на шаге компиляции:

E2040 Declaration terminated incorrectly Compiler error
-----------------------------------------------------------------------------------
A declaration has an extra or incorrect termination symbol, such as a semicolon placed after a function body.

A C++ member function declared in a class with a semicolon between the header and the opening left brace also generates this error.

Выдается это по поводу строки в модуле :

...
extern "C" {
...

Стандартные модули я стараюсь не трогать. Тем более редактировать. Тем не менее ошибка возникла.

Что бы это могло быть? А главное, как от этого избавиться?
AVC
Отправлено: 16.06.2005, 08:47


Ветеран

Группа: Модератор
Сообщений: 1583



Бывает, например, если ваш include файл содержит ошибку а следом идут другие include. Ошибка может проявиться только на следующих.
Георгий
Отправлено: 16.06.2005, 09:20


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



где то скобка фигурная не закрыта
tsl
Отправлено: 17.06.2005, 04:43


Дежурный стрелочник

Группа: Участник
Сообщений: 65



Прошу прощения. Перечитал свое сообщение и обнаружил неточность. Каким то образом слово пропало . Дело в том, что указанная строка, по которой выдается сообщение, находится в стандартном модуле .

Если кто-то понимает ситуацию, прокоментируйте.
tsl
Отправлено: 17.06.2005, 04:52


Дежурный стрелочник

Группа: Участник
Сообщений: 65



Опять увидел тоже самое. Пропала часть моего предыдущего сообщения. Понял, что запрещены к написанию угловые скобки. В угловых я писал math.h.

Текст
...
extern "C" {
...

находится в модуле math.h.

Каким образом мои действия могут отразиться на компиляции этого модуля? Почему он вообще компилируется? Соответствующая опция вроде бы у меня отключена.
tsl
Отправлено: 17.06.2005, 06:29


Дежурный стрелочник

Группа: Участник
Сообщений: 65



Могу еще добавить интересную информацию о предыдущей ошибке, которую я раскрыл сам. Приложение неожидано для меня выдало ошибку "нарушение защиты памяти". Ни на какой участок текста не ссылалась. При попытке пошагового выполнения выдавало эту ошибку до появления первой линии выполнения.

Понятно, что что-то выходит за границы дозволенного до того как выпоняется первый формальный оператор. Путем тыка и логических рассуждений я пришел к строке:

AnsiString MyException::Path = ExstractFilePath(Application->ExeName);

Здесь заполняется статическое поле класса. В тексте класса:

static AnsiString Path;

По моему мнению происходила попытка выделить часть строки из объекта AnsiString до того как этот объект сформирован.

Попутно для себя я выяснил, что операторы инициализации, т.е. операторы не находящиеся в теле процедур, пошагово выполнить нельзя. Или я не включил какую-нибудь опцию? Если понимаете, прокоментируйте.

Отредактировано tsl — 17/06/2005, 06:33
Gedeon
Отправлено: 17.06.2005, 13:20


Ветеран

Группа: Модератор
Сообщений: 1742



По поводу ошибки: Вы 100% где-то случайно отредактировали какой-нибудь h || hpp файл, откройте папку include и отсортируйте файлы по дате, тот к-рый последний и есть он.
tsl
Отправлено: 17.06.2005, 18:05


Дежурный стрелочник

Группа: Участник
Сообщений: 65



Были у меня отредактированные файлы. Из Temp//BCB6... извлек (заменил). Непомогает.
Gedeon
Отправлено: 17.06.2005, 19:06


Ветеран

Группа: Модератор
Сообщений: 1742



Это 100% ошибка где-то в объявлении или в Вашем н-файле или подключенном, если стандартные хидеры не изменены, то у Вас.
tsl
Отправлено: 21.06.2005, 14:25


Дежурный стрелочник

Группа: Участник
Сообщений: 65



Это ужасно!!!! В одном из файлов проекта объявление класса не было закрыто символом ";". Результат — синтаксическая ошибка в math.h. Ну так можно работать??!!!!
Schumi
Отправлено: 21.06.2005, 22:32


Машинист паровоза

Группа: Участник
Сообщений: 206



А тебе надо семантическая и лингвистическая проверка?
tsl
Отправлено: 22.06.2005, 06:29


Дежурный стрелочник

Группа: Участник
Сообщений: 65



Мне надо — корректная работа. Мой хочет видеть ошибка там где она есть.

Не надо неправильно понимать. СИ мне очень нравится, но иногда откровенность, с которой он соединяет файлы (и в какой последовательности!!), достает. Интересно, такая ошибка возникнет, если соединять не инклудами, а пространствами имен?

Отредактировано tsl — 22/06/2005, 06:32

Вернуться в Вопросы программирования в C++Builder