Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Error c2059 синтаксическая ошибка

error c2059 синтаксическая ошибка

Я просмотрел другие посты и, честно говоря, я до сих пор не уверен, что является причиной проблемы. Я программирую в Visual Studio и

У меня есть следующий код: (это главный C)

Он использует следующий код cpp:

С соответствующим заголовочным файлом:

Но я продолжаю получать следующие ошибки:

Пожалуйста, могу ли я получить некоторую помощь, я смотрел на другие сообщения, касающиеся c2059, но до сих пор не получается

Решение

Измени свой exec декларация об использовании EXTERNC макрос, который вы постарались определить.

Другие решения

Я столкнулся с этой ошибкой компиляции при добавлении enum к проекту. Оказалось, что одно из значений в enum определение имело конфликт имени с препроцессором #define ,

enum выглядело примерно так:

А потом в другом месте был #define со следующим:

Затем в .cpp где-то еще в проекте оба заголовка были включены:

Поскольку имя kUnknown уже #define когда компилятор пришел к kUnknown символ в моем enum , он сгенерировал ошибку, так как символ уже использовался для определения строки. Это вызвало загадку syntax error: ‘string’ что я видел.

Это было невероятно запутанным, поскольку в enum определение и компилируется просто отлично.

Это не помогло, что это было в очень большом проекте C ++, и что #define был транзитивно включен в совершенно отдельный блок компиляции и был написан кем-то 15 лет назад.

Очевидно, что правильная вещь отсюда переименовать это ужасное #define к чему-то менее распространенному, чем kUnknown , но до тех пор, просто переименовав enum значение для чего-то другого работает как фикс, например:

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

extern «C» используется для указания компилятору сделать его грамматикой языка Си, но вы имеете в виду объявить внешнюю функцию exec. Вы просто объединяетесь с этим. поэтому переписайте ваш код следующим образом в arp_piping.h:

и затем префикс extern «C» в файле cpp.
если вы хотите компилировать их с грамматикой C, просто установите в cpp вызов функции exec, поэтому напишите так:

Ошибки:
error C2059: синтаксическая ошибка: namespace

error C2334: непредвиденные лексемы перед « ;
>

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) listBox2->Items->Clear();
this->listBox2->Items->Add(«While «);
int n = 2, k = 1;
while(k listBox2->AppendText(n + » «);
n *=2;
k++;
>
>

I have looked at other posts and to be honest I am still not sure what is causing the problem. I am programming in Visual Studio and

I have the following code: (this is a C main)

Читать еще:  Как настроить подчеркивание ошибок в ворде

It uses the following cpp code:

With the matching header file:

But I keep on getting the following errors:

Please can I get some help, I have looked at other posts regarding the c2059 but am still getting nowhere

3 Answers 3

Change your exec declaration to use the EXTERNC macro you have taken pains to define.

I ran into this compilation error when adding an enum to a project. It turned out that one of the values in the enum definition had a name clash with a preprocessor #define .

The enum looked something like the following:

And then elsewhere there was a #define with the following:

Then, in a .cpp somewhere else in the project, both of these headers were included:

Since the name kUnknown was already #define ‘d, when the compiler came to the kUnknown symbol in my enum , it generated an error since the symbol was already used to define a string. This caused the cryptic syntax error: ‘string’ that I saw.

This was incredibly confusing since everything appears to be correct in the enum definition and compiles just fine on it’s own.

It didn’t help that this was in a very large C++ project, and that the #define was being transitively included in a completely separate compilation unit and was written by someone 15 years ago.

Obviously, the right thing to do from here is rename that terrible #define to something less common than kUnknown , but until then, just renaming the enum value to something else works as a fix, e.g.:

Anyway, hopefully this answer is helpful for someone else, since the cause of this error stumped me for a good day and a half.

Как разобраться в синтаксической ошибке?

#include
#include
//#include
//#include
//#include
//#include
//#include
//#include
//#include

// Add DEFINES Here

// Add Function prototypes Here

void RtWriteLPTPort ( USHORT PortAddr ,BYTE Value )
<
_asm <
mov DX, PortAddr
mov AL, Value
out DX, AL
>
>

bool RtBIOSDetectPCI ( void )
<
_asm <
mov AX, B101h
int 1Ah
jc & nopcibios
mov AX, 1
ret

& nopcibios :
xor AX, AX
ret
>

Первую функцию хавает без проблем, а на второй уперся рогом.
Приложение компилю в RTSSRelease Mode.

Ошибки:
USB.h(35) : error C2061: syntax error : identifier ‘RtBIOSDetectPCI’
USB.h(35) : error C2059: syntax error : ‘;’
USB.h(35) : error C2059: syntax error : ‘type’
USB.h(39) : error C2059: syntax error : ‘bad suffix on number’

Пол дня уже эта тварь отняла, помогите.

35 ответов

Странно всё это, но ошибок стало меньше.
Сижу тут из паскалевского ассемблера переделываю в сишный, вот исходник из книги:

Читать еще:  Как исправить ошибку vpn

Оставшиеся ошибки:
1,2 те же.
3 (34) : error C2059: syntax error : ‘)’

Жалко к делфи нету этой примочки RTX, с удовольствием пересел бы на него.

Короче вот такой пока код:

bool RtBIOSDetectPCI ( void )
<
_asm <
Mov AX, 0xB101
Int 0x1A
Jc & nopcibios
Mov AX, 0x1
Ret

Не пойму причём тут название функции? Чем принципиально первая функция от второй отличается?
С ассемблерным кодом разобрались, спасибо вам Alm3n.
А вот ошибки в сишном коде не могу увидеть.
В книге функция объявлена вот так:

Function DetectPCIBios: Boolean; assembler;

Может вместо ассемблер нужно чтото написать? Я написал register(т.к assembler он не хавает), но тогда появляются следующие ошибки:

(34) : error C2054: expected ‘(‘ to follow ‘bool’
(34) : error C2085: ‘RtBIOSDetectPCI’ : not in formal parameter list

Проблем с переводом нету, спасибо.

Проблема в том что я хочу расширить функционал RTX API, написать функции на ассемблере и оформить их как отдельный (по понятиям делфи) модуль. Реализовать это хочу самым простым способом, без всяких динамических библиотек и прочего мутора.

В общем нужно чтоб я мог писать функции в отдельном файле, а в основном .c файле мог их спокойно вызывать.

Проблем с переводом нету, спасибо.

Проблема в том что я хочу расширить функционал RTX API, написать функции на ассемблере и оформить их как отдельный (по понятиям делфи) модуль. Реализовать это хочу самым простым способом, без всяких динамических библиотек и прочего мутора.

В общем нужно чтоб я мог писать функции в отдельном файле, а в основном .c файле мог их спокойно вызывать.

Если язык Си, то прототипы функций не обязательны, можно код сразу писать в .с файлах, подключаемых к проекту.

А можно какой нибудь проктический пример?
У меня сейчас есть USB.h и USB.c(главный фаил в котором всё происходит). Например я создам фаил myrtapi.c, в котором как я понимаю не должно быть таких проблем и можно будет написать несколько функций.
Как его потом подключить к USB.c?

Насчёт си или с++ походу я ошибся я выбирал при создании проекта тип проекта визуал с++, а он в итоге .с файлы ляпает

На данный момент сделал следующее:
1) создал фаил myrtapi.c. Выбрал меню проект, в нём создать новый item(yне знаю перевода).
2) Написал в нем функции:

Это всё содержимое файла.

bool RtBIOSDetectPCI ( void )
<
_asm <
Mov AX, 0xB101
Int 0x1A
Jc & nopcibios
Mov AX, 0x1
Ret

Читать еще:  Ошибка directx 11

3) Попытался скомпилить, после чего был расстрелен компилятором.

Фаил myrtapi.c отображается в структуре проекта, но от этого не легче.
Вот такие теперь ошибки:

.myrtapi.c(13) : error C2146: syntax error : missing ‘)’ before identifier ‘PortAddr’
.myrtapi.c(13) : error C2061: syntax error : identifier ‘PortAddr’
.myrtapi.c(13) : error C2059: syntax error : ‘;’
.myrtapi.c(13) : error C2059: syntax error : ‘,’
.myrtapi.c(13) : error C2059: syntax error : ‘)’
.myrtapi.c(25) : error C2061: syntax error : identifier ‘RtBIOSDetectPCI’
.myrtapi.c(25) : error C2059: syntax error : ‘;’
.myrtapi.c(25) : error C2059: syntax error : ‘type’

Может, человек драйвер пишет. Отчего не будет-то?

PS: Аффтар как всегда решает не те задачи.

Буду теперь знать, что не работает под Windows это прерывание.

В смысле как это не будет? Приложение RTSS. Устанавливает свой HAL который начинает рулить виндой.
Например запись в LPT порт под виндой не идёт, пишет что не хватает привелегий для такой операции, а под этой хренью всё пишется без напрягов
Вот этот код например:

Штука рульная. Например я написал записывать последовательно в порт значения 0 и 255 на протяжении минуты, и вижу как мигает светодиод подключенный к порту.
Так же написал на делфи завешивалку системы с максимальным для винды приоритетом. Так вот когда я запускаю завешивалку винда виснет намертво(не двигается мышка, не срабатывает капс лок на клаве), а это приложение работает дальше как ни в чём не бывало. При чём завешивалка именно загружает проц на сто пудов.

Осталось только с си разобраться, пока он не поддаётся моей логике.
Вы бы если это для вас не очень обременительно прокоментировали что я не так сделал.

Насчёт int 0x1a ‘Это из книги, там автор предупреждает что под серией операционок NT работать не будет, так же предупреждали и про код для записи в порт.

Что значит «предупреждает»? То есть, вы знали, что работать не будет, но всё равно пишите?

Да всё равно пишу, по тому что приложение в итоге выходит не для виндовс(.ехе), а для подсистемы RTSS(.rtss).

Если смотреть с точки зрения виндовых колец защиты, то получается что это -1-е кольцо.

Я даже скажу больше по уверениям разработчиков этой хрени приложение продолжит работать как ни в чём не бывало если у винды вылезет так называемый экран смерти.
У этого приложения будет свой, зеленый экран смерти(в прямом смысле зелёный). Если чё нибудь не так закодю возможно его увижу, винде я так понял тоже будет в этот момент шабаш.

Ссылка на основную публикацию
Adblock
detector