Hello!
I am currently working on a game for MS-DOS, but I ran into a «Declaration syntax error» while defining a class in a seperate file… The error occurs in the header file.
|
|
Sorry if it is obvious!
If you need either MAIN.CPP or MAP.CPP, I can post them too.
Ans bevore someone tells me that Turbo C++ is outdated, I know, but loke is said before, i am making a game for MS-DOS so i cannot use something newer.
Edit: Forgot to tell that the error happens in the line
class Map {
Last edited on
Can you copy and paste the exact, verbatim error message with all information it might include?
MS-DOS? As in the operating system from the 80s? I must ask, why torture yourself by making a game for an OS that 99.9999% of people no longer have?
And yes, you might as well paste your other files as well.
What you should do if you want the best chance of us being able to help you is make a complete, minimal example (preferably, only 1 file) that reproduces the same error in the fewest lines of code possible.
__________________________________
My guess is a syntax error in the place above where you #include «Map.h»
Last edited on
So, first of all, the complete error message I get from the compiler is:
•Error MAP.H 4: Declaration syntax error
2nd, I am making it for MS-DOS just for fun. I like seeing my programs working on 20 years old machines… Dont ask further about this xD
3rd, here is MAP.CPP:
|
|
where /*path to file*/ is, is actually a path
COMMON.H:
|
|
And MAIN.CPP is about 1000 lines long and mist of it is actually the main menu, but the part that is important:
|
|
Hope i dont have to write the whole MAIN.CPP out on mobile… my DOS machine does not have an Internet connection…
And i tried with a small sample program, same error…
No, I’m sure you don’t have to post *everything*.
Sorry, I assumed the compiler would give at least somewhat of a better error message. I overestimated :P… I’m not that knowledgeable of Turbo-C++, by the way. But still figured I’d reply because I doubt you’d get a timely solution either way.
I’m not seeing anything immediately wrong with what you’ve posted. ‘Declaration syntax error’ can apparently mean a variety of different problems, but it seems most likely that it means you missed a semi-colon or comma or something, or otherwise incorrectly declared a variable. Or, it could be a mismatched {, }, #if, #ifndef, #endif, etc.
Can you show the lines around where you declare your map object?
Also, where you define your actual g_map (not just the extern declaration).
Unrelated, but on line 9 int indexX = 0, indexY = 0;
Maybe you already know this, but these variables have nothing to do with your class variables.
_____________________________
Furthermore, I want to re-iterate: You said you had a lot of lines of code. I sincerely suggest making a new project (so you don’t screw up what you currently have), copying your current code into it, moving all your code into one file, and remove all irrelevant logic and lines of code that don’t affect the appearance of your error message. This will immensely help narrow down the issue.
Remove some lines of code, try to compile. Remove some lines of code, try to compile. etc, etc.
If I’m correct, you should be able to whittle down your program to just be two dozen or so lines.
EDIT: I saw your other post
And i tried with a small sample program, same error…
Post the sample program, please.
Last edited on
So, In the MAIN.CPP if you mean that:
|
|
also after a bit of research, it could be that the .H file is somehow recognized from the compiler as a .C file…
Also i found out that the «Declaration syntax error» occurs, when Turbo C++ does not know that Datatype. But the class datatype is listed in the help index in turbo c++
Edit: corrected typos in this post
Last edited on
Sorry I was editing my post a lot as well to clarify things.
Yeah your map variable declaration looks correct, it was another guess.
Could you post your small sample program that you made? Maybe I could try compiling on virtual machine… Also, I don’t know what Datatype is, mind clarifying?
Last edited on
Some examples for what I mean by datatype: int, char
and my Sample code looks like this:
MAIN.CPP:
|
|
COMMON.H:
|
|
TEST.H:
|
|
and last but not least, TEST.CPP:
|
|
Also it is almost 12am or midnight in germany, the next time that i would reply would be in about 7-9 hours… just so you know
I just read the edit… The g_map is declared in MAIN.CPP and declared as extern in COMMON.H
Last edited on
So, the last thing I’ve done before i go to sleep, i tried to compress the sample code into one file:
|
|
And that worked fine!
so the problem has to do with the header files…
i will research more later
Last edited on
TL;DR — I could not figure out why you are getting that error.
I… partially figured it out. But not completely.
See the post below this one.
Ignore the rest of this post, it isn’t helpful.
I followed this guide http://www.horstmann.com/ccc/help/tc30dos.html
I was getting stupid linker errors for a while, but then added random spacing at the ends of files, according to a suggestion on StackOverflow.
I finally now have the same error as you!
… And wow, this is atrocious. Not your code, just… Turbo C++.
________________________________________________
This user had the same error as you, under similar circumstances.
https://www.reddit.com/r/learnprogramming/comments/7egrzy/declaration_syntax_error_in_turbo_c/
He said the problem is that Turbo C++ is detecting the .H file as a C file instead of a C++ file. But that doesn’t make sense, because .H files aren’t compiled, they are included in the .CPP files that are then compiled. And Turbo C++ should know that .CPP means C++.
I went to Options -> Compiler -> C++ Options -> [check] C++ always, but that changed nothing. Maybe still try it though.
Instead of doing «Build All» I tried to compile TEST.CPP and MAIN.CPP separately. «Compile» works fine, but then Make or Link produce Linker errors for me, complaining,
«Linker Error: Test::getTest() defined in module TEST.CPP is duplicated in module TEST.CPP»
«Linker Error: Test::Test() defined in module TEST.CPP is duplicated in module TEST.CPP»
I have no idea how to fix those… and googling is failing me. Sorry.
Last edited on
I THINK I FOUND IT (edit: well, partially)
DON’T ADD THE ACTUAL .H FILES TO THE PROJECT
(This sort of makes sense, since .H files aren’t actually compiled.)
(It’s still dumb and I hate Turbo-C++ more than I did before, but it was kinda nostalgic…)
I made a NEW project, and only added the 2x *.CPP files.
THEN, open COMMON.H (but don’t add it to your project), and
change «extern» to «static«
But now, since it’s static instead of extern, don’t re-define it in main.cpp.
Or… define it as extern in main.cpp?
Okay, at this point I’m lost. There’s some possibly non-standard syntax going on that makes declaring it extern bad inside the header file, or something. When I run the program, it doesn’t print the characters, but does print a «Hello» I added.
But hey, at least we’ve narrowed down the problem to be being non-standard extern behavior. Maybe you can google that.
I’m going to bed.
See this Reddit thread, very helpful:
https://www.reddit.com/r/learnprogramming/comments/7ekhxn/cant_get_the_files_in_a_project_to_link_in_turbo_c/
https://www.reddit.com/r/learnprogramming/comments/7ekhxn/cant_get_the_files_in_a_project_to_link_in_turbo_c/dq5sxou/
Last edited on
Thank you for the help!
I think the variable should be fine, but now even though it compiles, it crashes MS-DOS and with the debugger it says it is in my mainMenuDraw function… I think i let MS-DOS go for quite some time and go back to Windows.
Greetings TimCoding
Перечень сообщений
— A — — B — — C — — D — |
— E — — F — — G — — H — |
— I — — L — — M — — N — |
— O — — P — — R — — S — |
— T — — U — — V — — W — |
— D —
Debug into switch ignored for .COM files
Предупреждение утилиты TLINK
(параметр отладочной информации для файлов .COM игнорируется)
Borland C++ не включает отладочную информацию в файлы .COM.
См. описание параметра /v.
Debug information in module модуль will be ignored
Предупреждение утилиты TLINK
(информация для отладки в модуле модуль будет игнорироваться)
Объектные файлы, скомпилированные с включением отладочной
информации, теперь содержат запись о версии. Основная версия в
данной записи выше той, которую в настоящее время поддерживает
компоновщик TLINK, поэтому компоновщик не может сгенерировать
отладочную информацию для данного модуля.
Debug information overflow; try fewer modules withDebug info
Сообщение об ошибке утилиты TLINK
(переполнение отладочной информации; попробуйте включать отладочную информацию в меньшее число модулей)
Слишком много участвующих в компоновке модулей содержат отладочную информацию. Перекомпилируйте программу с меньшим объемом
отладочной информации.
DeclarationDoes not specify a tag or an identifier
Сообщение об ошибке этапа компиляции
(описание не определяет идентификатор или признак)
Это описание ничего не описывает. Это может быть структура
или объединение без признака, либо переменная в описании. С++
требует, чтобы что-то описывалось.
Declaration is not allowed here
Сообщение об ошибке этапа компиляции
(объявление здесь недопустимо)
Объявления не могут использоваться в управляющих операторах
для операторов while, for,Do. if или switch.
Declaration missing ;
Сообщение об ошибке этапа компиляции
(в объявлении отсутствует
В исходном файле содержится объявление поля структуры или
объединения, в котором отсутствует точка с запятой (;).
Declaration syntax error
Сообщение об ошибке этапа компиляции
(синтаксическая ошибка в объявлении)
Исходный файл содержит объявление, в котором отсутствует некоторый символ имя или наоборот имеются лишние.
Declaration terminated incorrectiy
Сообщение об ошибке этапа компиляции
(неправильное окончание объявления)
Объявление содержит лишний или неверный конечный символ,
например, точка с запятой, помещенная после тела функции. Эту
ошибку также дает функция-элемент С++, объявленная в классе с
точкой с запятой между заголовком и открывающей левой фигурной
скобкой.
Declaration was expected
Сообщение об ошибке этапа компиляции
(требуется объявление)
Требуется, но не найдено объявление. Это обычно бывает при
отсутствии разделителя, например, запятой, точки с запятой, правой круглой скобки или правой квадратной скобки.
Declare operatorDelete (void*) or (void*, size_t)
Сообщение об ошибке этапа компиляции
(описание операцииDelete (void*) или (void*, size_t))
Описание операцииDelete с единственным параметром void* или
со вторым параметром типа size_t. Если вы используете вторую версию, то она будет использоваться для ссылки на первую версию.
Глобальная операцияDelete может описываться только в форме с одним параметром.
Declare operatorDelete[] (void*) or (void*, size_t)
Сообщение об ошибке этапа компиляции
(описание операцииDelete[] (void*) или (void*, size_t))
Опишите операторDelete с один параметром void и параметром
типа type size_t.
Declare type тип ptior to use in prototype
Предупреждение этапа компиляции
(описание типа тип перед использованием в прототипе)
Когда прототип функции ссылается на не описанный ранее тип
структуры, то описание в прототипе не эквивалентно описанию вне
прототипа. Например:
int func(struct S *ps) struct s{ /* ... */ }
Так как в области действия прототипа для функции func нет
структуры s, типом параметра ps будет указатель на неопределенную
структуру s и не эквивалентен описываемой позднее структуре s.
Далее это приведет к предупреждениям и сообщениям об ошибках
из-за несовместимых типов, что было бы весьма непонятным без данного предупреждения. Чтобы исправить ошибку, вы можете поместить
описание структуры s перед прототипом, который на нее ссылается,
или добавить перед любым прототипом, который ссылается на структуру s, неполное описание типа struct s;. Если параметром функции
является struct, а не указатель на struct, то неполное описание
недостаточно. Тогда вы должны поместить описание структуры перед
прототипом.
Default argument value redeclared
Сообщение об ошибке этапа компиляции
(переопределение заданного по умолчанию значения аргумента)
Когда для параметра функции С++ описывается значение по
умолчанию, это значение не может описываться заново, изменяться
или опускаться в другом описании той же функции.
Default argument value redeclared for parameter параметр
Сообщение об ошибке этапа компиляции:
(для параметра заново описано используемое по умолчанию значение аргумента параметр)
Когда описанный параметр функции С++ имеет используемое по
умолчанию значение, данное значение нельзя изменить, описать заново или пропустить в другом описании той же функции.
Default expression may not use local variable
Сообщение об ошибке этапа компиляции
(используемое по умолчанию значение не может использовать
локальную переменную)
В используемых по умолчанию аргументах выражения не допускается использование локальных переменных или других параметров.
Default outside of switch
Сообщение об ошибке этапа компиляции
(операторDefault вне оператора switch)
Компилятор обнаружил ключевое словоDefault вне оператора
switch. Обычно это вызывается пропущенной фигурной скобкой.
Default value missing
Сообщение об ошибке этапа компиляции
(пропущено используемое по умолчанию значение)
Если в функции С++ объявляется параметр со значением по
умолчанию, все последующие параметры также должны иметь значения
по умолчанию. В данном объявлении за параметром со значением по
умолчанию следует параметр без умолчания.
Default value missing following parameter параметр
Сообщение об ошибке этапа компиляции
(после параметра пропущено используемое по умолчанию значение)
Все параметры после первого параметра с используемым по
умолчанию значением также должны иметь заданные по умолчанию значения.
DefineDirective needs an identifier
Сообщение об ошибке этапа компиляции
(директивеDefine необходим идентификатор)
Первый непробельный символ после #define должен быть идентификатором. Компилятор встретил на этом месте какие-либо другие
символы.
symbolDefined in module модуль isDuplicated
Ошибка или предупреждение утилиты TLINK
(идентификатор, определенный в модуле модуль, дублируется)
Имеется конфликт между двумя идентификаторами (общими или
общедоступными). Обычно это означает, что идентификатор определен
в двух модулях. Если обе из них обнаружены в файлах .OBJ, возникает ошибка, так как TLINK не знает, какой из них является допустимым. Если TLINK обнаруживает один из дублируемых идентификаторов в библиотеке, а другой — файле .OBJ, то выводится предупреждение. В этом случае TLINK использует один из файлов .OBJ.
Delete array size missing ]
Сообщение об ошибке этапа компиляции
(в спецификаторе массива пропущена ])
В спецификаторе массива в операции даты пропущена скобка ].
Destructor cannot beDeclared const or volatile
Сообщение об ошибке этапа компиляции
(деструктор не может описываться как const или volatile)
Деструктор описан как const и/или volatile, а это не допускается.
Destructor cannot have a return type specification
Сообщение об ошибке этапа компиляции
(деструктор не может иметь спецификации типа возврата)
Деструкторы С++ не имеют типа возврата, и вы не можете объявить тип или значение возврата.
Destructor for класс is not accessible
Сообщение об ошибке этапа компиляции
(деструктор для класса недоступен)
Деструктор для данного класса имеет тип protected или
private и недоступен из данной точки для разрушения класса. Если
деструктор класса является частным (private), класс не может быть
разрушен и потому не может никогда быть использован. Это наверняка ошибка. Защищенный деструктор (protected) допускает доступ
только из производных классов. Это полезно для того, чтобы предотвратить создание базовых классов, обеспечив создание из них
производных классов.
Destructor for класс required in conditional expression
Сообщение об ошибке этапа компиляции
(в условном выражении потребовался деструктор класса класс)
Если компилятор должен создать временную локальную переменную в условном выражении, здесь неудобно вызывать деструктор,
поскольку переменная может оказаться как инициализированной, так
и неинициализированной. Временная переменная может создаваться
явно в виде имя_класса(значение_1,значение_2), либо неявно, некоторыми другими кодами программы. Измените код, чтобы избавиться
от этого временного значения.
Destructor name must match the class name
Сообщение об ошибке этапа компиляции
(имя деструктора должно соответствовать имени класса)
В классах С++ объявление деструктора класса вводится символом тильда (~). Имя деструктора должно совпадать с именем класса.
В вашем исходном файле ~ предшествует какому-то другому имени.
Divide error
Сообщение об ошибке этапа выполнения
(ошибка деления)
Вы пытаетесь разделить целое значение на 0, например:
int n = 0; n = 2 / n;
Вы можете перехватить эту ошибку с помощью сигнальной функции. В противном случае Borland C++ вызывает функцию abort, и
программа завершает работу.
Division by zero
Сообщение об ошибке этапа компиляции
(деление на ноль)
В исходном файле встретилось выражение типа константы,
представляющее собой нулевой делитель.
Division by zero
Предупреждение этапа компиляции
(деление на ноль)
Выражение с делением или получением остатка имеет в качестве
делителя литеральный ноль.
Division by zero
Сообщение об ошибке утилиты MAKE
(деление на ноль)
Деление или остаток в операторе !if имеет нулевой делитель.
Do statement must have while
Сообщение об ошибке этапа компиляции
(операторDo должен иметь while)
В исходном файле встретился операторDo без соответствующего
ограничивающего ключевого слова while.
имя_файлаDoes not exist -Don’t know how to make it
Фатальная ошибка утилиты MAKE
(файл не существует — неизвестно, как его сформировать)
В последовательности построения указано имя несуществующего
файла, и неизвестно правило, которое позволило бы сформировать
имя файла.
DOS error, ax = число
Сообщение об ошибке утилиты TLINK
(ошибкаDOS, ax = число)
Это происходит, еслиDOS возвращает непредвиденную ошибку. В
результирующем коде ошибки выводится значение регистра ax. Это
может говорить об ошибкеDOS или внутренней ошибке TLINK. Единственными вызовамиDOS, при которых TLINK может приводить к данной
ошибке, являются read, write, seek и close.
Do-whlle statement missing (
Сообщение об ошибке этапа компиляции
(в оператореDo-while отсутствует ()
В оператореDo компилятор не нашел после ключевого слова
while левой круглой скобки.
Do-whlle statement missing )
Сообщение об ошибке этапа компиляции (в оператореDo-while отсутствует ))
В оператореDo компилятор не нашел после условного выражения
правой круглой скобки.
Do-whlle statement missing ;
Сообщение об ошибке этапа компиляции
(в оператореDo-while отсутствует
В условном выражении оператораDo компилятор не нашел точки
с запятой после правой круглой скобки.
Dublicate case
Сообщение об ошибке этапа компиляции
(повторение case)
Каждое ключевое слово case оператора switch должно иметь
уникальное значение выражения-константы.
Duplicate Handler for type тип1, already had тип2
Сообщение об ошибке этапа компиляции:
(обработчик для типа1 дублируется; уже задан для типа2)
Не допускается иметь два обработчика одного типа.
Duplicate ordinal for exports: строка (знач1) and строка(знач2)
Предупреждение утилиты TLINK
(В операторе export дублируется номер)
Две экспортируемые функции, перечисленные в секции EXPORTS
файла определения модуля определяют то же внутреннее имя, но разное порядковое значение. Задайте одно значение или удалите одну
из них.
— E —
Empty LEDATA record in module модуль
Предупреждение утилиты TLINK
(пустая запись LEDATA в модуле)
Такое предупреждение возможно, если транслятор генерирует
запись без данных. Сообщите об этом разработчику транслятора. Такая запись может давать отрицательные эффекты.
Enum syntaxError
Сообщение об ошибке этапа компиляции
(синтаксическая ошибка вEnum)
ОбъявлениеEnum не содержит правильно оформленного списка
идентификаторов.
Error changing file buffer size
Сообщение об ошибке утилиты TLIB
(ошибка изменения размера буфера файла)
Утилита TLIB пытается настроить размер буфера файла, используемого при операции чтения или записи в файл, но памяти не хватает. Чтобы исправить ситуацию, может потребоваться освободить
некоторый объем системной памяти.
Error directive: сообщение
Фатальная ошибка этапа компиляции
(директиваError: сообщение)
Данное сообщение появляется при обработке директивы #error
из исходного файла. Текст этой директивы выводится в сообщении.
Error directive: сообщение
Фатальная ошибка утилиты MAKE
(директиваError: сообщение)
Данное сообщение появляется при обработке утилитой MAKE директивы #error из исходного файла. Текст этой директивы выводится
в сообщении.
Error opening имя_файла
Сообщение об ошибке утилиты TLIB
(ошибка открытия указанного файла)
Утилита TLIB по каким-то причинам не может открыть указанный
файл.
Error opening имя_файла for output
Сообщение об ошибке утилиты TLIB
(ошибка открытия файла для вывода)
TLIB по каким-то причинам не может открыть указанный файл
для вывода. Обычно это вызывается недостатком места на диске для
файла библиотеки или листинга. Кроме того эта ошибка может возникать в ситуации, когда целевой файл существует, но помечен как
доступный только по чтению.
Error renaming имя_файла to имя_файла
Сообщение об ошибке утилиты TLIB
(ошибка переименования файла)
TLIB строит библиотеку, используя временный файл, а затем
переименовывает временный файл в целевую библиотеку. Ошибка
обычно вызывается нехваткой места на диске.
Error writing output file
Сообщение об ошибке этапа компиляции
(ошибка при записи выходного файла)
Ошибка DOS при попытке Borland C++ вывести файл .OBJ, .EXE
или временный файл. Проверьте параметры командной строки. Убедитесь также, что на диске достаточно места.
__except or __finallyExpected following __try
Сообщение об ошибке этапа компиляции
(за __try должно следовать __except или __finally
В С++ за блоком __try должен следовать блок обработки __except или __finally.
Exception handling variable may not be used there
Сообщение об ошибке этапа компиляции
(здесь не должна использоваться переменная обработки исключительной ситуации)
Предпринята попытка использовать одно из значений обработки
исключительной ситуации, которое ограничивается конкретной конструкцией обработки, например, GetExceptionCode().
Exception specification not allowed here
Сообщение об ошибке этапа компиляции
(спецификация исключительной ситуации здесь не допускается)
Описания типа указателя на функцию не должны содержать спецификаций особых ситуаций.
Explicit stacks are ignored in PE images
Предупреждение TLINK
(явные стеки в образах PE игнорируются)
32-разрядные приложения Windows имеют формат приложений PE
без явного указания стеков. Сегмент стека компонуется с образом,
но не будет использоваться как стек приложения. Для установки
размера стека используется параметра размера стека, и выделять
стек будет операционная система.
Export идентификатор is duplicated
Предупреждение TLINK
(экспортируемый идентификатор дублируется)
В _export два раза используется одно и то же имя. Компоновщик использует первый идентификатор.
ExpressionExpected
Сообщение об ошибке этапа компиляции
(требуется выражение)
Здесь требуется выражение, а текущий символ не может начинать выражение. Это сообщение может выдаваться, когда ожидается
в предложении if или while управляющее выражение, либо при инициализации переменной. Сообщение часто появляется в результате случайно вставленного или удаленного из исходного файла символа.
Expression of scalar typeExpected
Сообщение об ошибке этапа компиляции
(ожидается выражение скалярного типа)
Унарные операции отрицания (!), увеличения (++) и уменьшения
(—) требуют выражений скалярного типа. Допустимыми являются
только типы char, short, int, long,Enum, float, double и long
double и типы указателей.
Expression syntax
Сообщение об ошибке этапа компиляции
(синтаксис выражения)
Это обобщенное сообщение об ошибке, выдаваемое, когда компилятор при лексическом анализе выражения встречает какую-либо
серьезную ошибку. Наиболее часто она встречается, если подряд
следуют две операции, либо при отсутствии или несоответствии числа круглых скобок, либо при отсутствии точки с запятой в предыдущем выражении.
Expression syntaxError in !if statement
Сообщение об ошибке утилиты MAKE
(синтаксическая ошибка выражения в операторе !if)
Выражение в операторе !if имеет неправильный вид: оно содержит неравное количество открывающих и закрывающих скобок, лишний
или пропущенный оператор или пропущенную или лишнюю константу.
причина -Extended dictionary not created
Предупреждение утилиты TLIB
(расширенный словарь не создан)
Утилита TLIB не могут сформировать расширенный словарь из-за
причины, указанной в сообщении.
Extended dictionary bot found in library библиотека,Extended dictionaries ignored
Предупреждение утилиты TLINK
(в указанной библиотеке на найден расширенный словарь; расширенные словари игнорируются)
Параметр /E TLINK требует, чтобы все библиотеки имели расширенные словари. Если в ходе компоновки обнаруживается библиотека
без расширенного словаря, то компоновщик не обрабатывает расширенные словари и выполняет процесс компоновки по умолчанию.
Extern variable cannot be initialized
Сообщение об ошибке этапа компиляции
(переменнаяExtern не может быть инициализирована)
Класс памятиExtern применительно к переменной означает, что
переменная здесь объявляется, но не определяется — распределение
памяти для нее не происходит. Следовательно, инициализация переменной в объявлении невозможна.
Extern идентификатор was not qualified with __import in module модуль
Предупреждение утилиты TLINK
(внешний идентификатор не описан в модуле с помощью __import)
В 32-разрядных приложениях Windows, ссылающихся на импортируемые идентификаторы, требуется косвенное указание на получение
данных. В вызовах это автоматически обрабатывается компоновщиком.
В ссылках на импорт DATA эту косвенную связь должен генерировать
компилятор (иначе приложение будет работать некорректно), а для
этого идентификатор должен описываться с __import.
Extra argument in template class name шаблон
Сообщение об ошибке этапа компиляции
(лишний аргумент в шаблоне имени класса)
Шаблон имени класса задает слишком много фактических значений для его формальных параметров.
Extra parameter in call
Сообщение об ошибке этапа компиляции
(Лишние параметры в вызове)
Вызов функции через указатель, определенный в прототипе, содержит слишком много аргументов.
Extra parameter in call to функция
Сообщение об ошибке этапа компиляции
(Лишние параметры в вызове функции)
Вызов названной функции (которая была определена с прототипом) содержит слишком много аргументов.
— F —
Failed to locate DPMI server (MPMI16BI.OVL)
Failed to locate protected mode loader (DPMILOAD.EXE)
Сообщение об ошибке этапа компиляции
(не найден сервер DPMI)
Убедитесь, что файлы MPMI16BI.OVL находится в каком-либо
указанном в маршруте каталоге, или в том же каталоге, что и командное средство защищенного режима, которое вы пытаетесь использовать.
Failed to locate protected mode loader (DMPILOAD.EXE)
Фатальная ошибка командной строки:
(не найден загрузчик защищенного режима)
Убедитесь, что файл DMPILOAD.EXE находится в каком-либо указанном в маршруте каталоге, или в том же каталоге, что и командное средство защищенного режима, которое вы пытаетесь использовать.
Failed read from имя_файла
Сообщение об ошибке утилиты TLINK
(чтение из файла невозможно)
Компоновщик не может прочитать данный файл.
Failed write from имя_файла
Сообщение об ошибке утилиты TLINK
(запись в файла невозможна)
Компоновщик не может записать данный файл.
__far16 may be used with __pascal or __cdecl
Сообщение об ошибке этапа компиляции
(__far16 может использоваться __pascal или __cdecl)
Для вызовов функций или ссылки на данные в 16-разрядной DLL
вы использовали __far16, но такие функции и данные могут модифицироваться только с помощью __pascal или __cdecl.
File must contain at least one external declaration
Сообщение об ошибке этапа компиляции
(файл должен содержать хотя бы одно объявление external)
Данная единица компиляции было логически пустой и не содержала никаких объявлений. Язык Си стандарта ANSI и С++ требуют,
чтобы в единице компиляции находились какие-нибудь переменные.
File name too long
Сообщение об ошибке этапа компиляции
(слишком длинное имя файла)
Имя файла в директиве #include было слишком длинным для обработки его компилятором. Имена файлов в DOS не могут превышать
79 символов.
File name too long
Сообщение об ошибке этапа компиляции
(имя файла имеет слишком большую длину)
Имя файла, заданное в директиве !include, имеет слишком
большую длину для обработки ее обслуживающей программой МAKE 512 байт (размер внутреннего буфера).
имя_файла file not found
Предупреждение утилиты TLIB
(указанный файл не найден)
Библиотекарь, работающий в режиме командной строки, пытается
добавить несуществующий объект, но библиотека создана.
имя_файла file not found
Сообщение об ошибке утилиты TLIB
(указанный файл не найден)
Интегрированная интерактивная среда создает библиотеку, удаляя сначала существующую библиотеку, а затем выполняя перестройку. Если какой-либо объект не существует, то библиотека считается
неполной, и возникает данная ошибка. Если интегрированная среда
сообщает, что библиотека не существует, то при компиляции исходного модуля могли быть ошибки. Выполнение команд Compile Make или
Compile Build должно помочь избавиться от ошибки, или определить,
где существует ошибка.
имя_файла(имя_строки): File read error
Сообщение об ошибке утилиты TLINK
(ошибка чтения файла)
При чтении программой TLINK файла определения модуля возникла ошибка DOS. Это обычно указывает не преждевременный конец файла.
Fixup to zero length segment in module модуль
Сообщение об ошибке утилиты TLINK
(корректировка в сегмент с нулевым размером в указанном модуле)
Указывает на некорректную ссылку в объектном коде (которую
TLINK должен скорректировать во время компоновки) на код или данные.
Fixup owerflow at адрес, target=адрес
Сообщение об ошибке утилиты TLINK
(переполнение корректировок по указанному адресу)
Некорректные данные или ссылка на код в объектном файле, который компоновщик должен корректировать на этапе компоновки.
Причиной часто бывает несоответствие моделей памяти. Чаще
всего имеется ближний вызов функции в другом сегменте кода. Данная ошибка может также возникнуть, если вы генерируете ближнее
обращение к данным или ссылку данных на функцию. В любом случае
идентификатор, указанный в target в сообщении об ошибке — это переменная или функция, на которую делается ссылка. Ссылка находится в указанном модуле, поэтому ищите в исходном файле данный модуль.
В программе на языке Ассемблера переполнение корректировок
часто возникает, если вы описываете внешнюю переменную в определении сегмента, но данная переменная на самом деле существует в
другом сегменте.
Если данный метод не позволяет идентифицировать причину
ошибки, или вы программируете на языке высокого уровня, отличном
от Borland C++, то эта ошибка может вызываться другими причинами.
В Borland C++ данная ошибка может генерироваться, если вы используете сегменты и имена групп, отличные от используемых для данной
модели памяти по умолчанию.
Floating point error: Divide by 0
Floating point error: Domain
Floating point error: Overflow
Сообщение об ошибке этапа выполнения
(ошибка операции с плавающей точкой: деление на 0 или переполнение)
Данная фатальная ошибка является следствием операции с плавающей точкой, для которой результат не определен. «Деление на 0»
означает, что результат равен в точности +INF или -INF (плюс или
минус неопределенность), например для операции 1.0/0.0. Domain
означает, что результат не является числом, а переполнение — на
потерю значимости, например в случае присваивания 1e20*1e20 переменной типа double.
Floating point error: Partial loss of precision
Сообщение об ошибке этапа выполнения
(ошибка операции с плавающей точкой: частичная потеря точности)
Эта особая ситуация по умолчанию маскируется, и сообщения об
ошибках не выдаются. Потери точности игнорируются. Отменить маску
можно, вызвав _control87.
Floating point error: Underflow
Сообщение об ошибке этапа выполнения
(ошибка операции с плавающей точкой: потеря значимости)
Эта особая ситуация по умолчанию маскируется, и сообщения об
ошибках не выдаются. Потеря значимости преобразуется в ноль. Отменить маску можно, вызвав _control87.
Floating point error: Stack fault
Сообщение об ошибке этапа выполнения
(ошибка операции с плавающей точкой: сбой в стеке)
Это сообщение указывает на выход за границы стека плавающей
точки. В нормальных условиях оно не появляется и поэтому может
означать либо то, что ассемблерный код использует слишком много
регистров, либо неправильное объявление функции с плавающей точкой.
Этой ошибки можно избежать, маскируя особые ситуации таким
образом, чтобы они не появлялись, либо перехватывая их функцией
signal или _control87.
For statement missing (
Сообщение об ошибке этапа компиляции
(в операторе for отсутствует ()
В операторе for компилятор не нашел левой круглой скобки
после ключевого слова for.
For statement missing )
Сообщение об ошибке этапа компиляции
(в операторе for отсутствует ))
В операторе for компилятор не нашел после управляющего выражения правой круглой скобки.
For statement missing ;
Сообщение об ошибке этапа компиляции
(в операторе for отсутствует
В операторе for компилятор не нашел точки с запятой после
одного из выражений.
Friend must be functions or classes
Сообщение об ошибке этапа компиляции
(«друзья» должны быть функциями или классами)
Дружественной в C++ может быть класс или другая функция.
Function call missing )
Сообщение об ошибке этапа компиляции
(в вызове функции отсутствует ))
Список аргументов при вызове функции содержит какую-то синтаксическую ошибку, например, отсутствует закрывающая правая
скобка.
Function calls not supported
Сообщение об ошибке этапа компиляции
(вызовы функции не поддерживаются)
При вычислении выражения интегрированным отладчиком вызовы
функций (включая функции неявного преобразования, конструкторы,
деструкторы, переопределенные операции и встраиваемые функции) не
поддерживается. Данное сообщение выводится отладчиком интегрированной среды.
Function defined inline after use as extern
Сообщение об ошибке этапа компиляции
(функция определена как встраиваемая после объявления
extern)
Функцию после того, как она была уже была использована нельзя определить как встраиваемую (inline). Или переставьте определение inline выше в тексте, или удалите его совсем.
Function definition cannot be a typedef’ed declaration
Сообщение об ошибке этапа компиляции
(определение функции не может быть объявлением typedef)
В Си стандарта ANSI тело функции не может определяться с помощью typedef с функцией Type.
Function функция cannot be static
Сообщение об ошибке этапа компиляции
(функция «функция» не может быть статической)
Только обычные функции-элементы и операции new и delete могут быть объявлены статическими (static). Конструкторы, деструкторы и прочие операции статическими быть не могут.
Function функция should have a prototype
Сообщение об ошибке этапа компиляции
(функция «функция» должна иметь прототип)
При вызове функции в области действия отсутствовал ее прототип.
В Си int foo(); не является прототипом, а int foo(int); является, также как и int foo(void);. В С++ int foo(); является
прототипом, также как и int foo(void);. В Си прототипы рекомендуется иметь для всех функций. В С++ прототипы для всех функций
обязательны. Во всех случаях, определение функции (заголовок и
тело функции) служит как прототип, если стоит перед любым другим
упоминанием функции.
Function should return a value
Предупреждение этапа компиляции
(функция должна возвращать значение)
Данная функция была описана (возможно неявно) как возвращающая значение. Был обнаружен оператор return без возвращаемого
значения или конец функции без оператора return. Возвращайте значение или описывайте функцию как void.
Functions функция_1 and функция_2 both use the same dispatch number
Сообщение об ошибке этапа компиляции
(обе функции используют один номер диспетчеризации)
Ошибка диспетчеризуемой виртуальной таблицы (DDVT). При переопределении динамически диспетчеризуемой функции в производном
классе используйте тот же индекс диспетчеризации.
Function cannot return array of functions
Сообщение об ошибке этапа компиляции
(функция не может возвращать массив функций)
Функция не может возвращать массив функций. Допускается возврат указателей или ссылок на массивы.
Functions containing local destructors are not expanded
inline in function функция
Предупреждение этапа компиляции
(функции, содержащие локальные деструкторы не могут быть
встраиваемыми функциями)
Вы создали встраиваемую функцию, для которой Borland C++
запрещает встраивание. Вы можете проигнорировать это предупреждение; охватывающая функция будет сгенерирована без расширения
встраиваемых функций.
Functions containing резервируемое_слово are not expanded inline
Предупреждение этапа компиляции
(функции, содержащие резервируемое_слово не могут быть
подставляемыми)
Функции, содержащие резервируемые слова do, for, while,
goto, switch, break, continue и case, не могут быть подставляемыми, даже при наличии задания их как inline. Функция может использоваться, но будет рассматриваться как обычная статическая (не глобальная) функция. Копия этой функции будет находиться в любой
единице компиляции, где она вызывается.
Functions may not be part of a struct or union
Сообщение об ошибке этапа компиляции
(функции не могут быть частью структуры или объединения)
Данное поле структуры или объединения Си было объявлено с
типом функции, а не указателя функции. Функции в качестве полей
разрешены только в С++.
— G —
General error
Сообщение об ошибке утилиты TLINK
(общая ошибка)
TLINK выводит максимум информации о том, что происходит во
время неизвестной фатальной ошибки.
General error in library file имя_файла in module модуль near module file offsef Oxyyyyyyyy
Сообщение об ошибке утилиты TLINK
(общая ошибка в библиотечном файла в модуле модуль, смещение
Oxyyyyyyyy)
TLINK выводит максимум информации о том, что происходит во
время неизвестной фатальной ошибки.
General error in module модуль near module file offsef Oxyyyyyyyy
Сообщение об ошибке утилиты TLINK
(общая ошибка в модуле модуль, смещение Oxyyyyyyyy)
TLINK выводит максимум информации о том, что происходит во
время неизвестной фатальной ошибки.
Global anonimous union not static
Сообщение об ошибке этапа компиляции
(глобальное анонимное объединение не является статическим)
В С++ глобальное анонимное объединение на уровне файла должно быть статическим (static).
Goto bypassed initialization of local variable
Сообщение об ошибке этапа компиляции
(конструкция goto обошла инициализацию локальной переменной)
В С++ недопустимо любым способом обходить инициализацию локальной переменной. В данном случае в конструкции goto управление
передается за точку инициализации локальной переменной.
Goto into exception handler is not allowed
Сообщение об ошибке этапа компиляции
(переход в обработчик особой ситуации не допускается)
Недопустимый переход в блок try или подключенный к нему обработчик особой ситуации.
Goto statement missing label
Сообщение об ошибке этапа компиляции
(отсутствует метка в операторе goto)
За ключевым словом goto должен следовать идентификатор.
Group группа exceeds 64К
Сообщение об ошибке утилиты TLINK
(группа «группа» превышает 64К)
При комбинировании сегментов размер группы превысил 64К.
Group overflowed maximum size: группа
Сообщение об ошибке этапа компиляции
Общий размер сегментов в группе (например, DGROUP) превысил
64.
Group группа_1 overlaps group группа_2
Предупреждение утилиты TLINK
(группа_1 перекрывает группу_2)
Это означает, что TLINK обнаружил вложенные группы. Данное
предупреждение возникает только при использовании оверлеев или
при компоновке программ Windows.
— H —
Handler for тип_1 hidden by previous handler for тип_2
Предупреждение компилятора
Такое предупреждение выводится, когда обработчик для производного от B типа D задан после обработчика для B, так как обработчик для D в этом случае вызываться не будет.
спецификатор has already been included
Сообщение об ошибке этапа компиляции
(спецификатор уже был включен)
Данный спецификатор типа встречается в объявлении более одного раза. Удалите или измените один из них.
Hexadecimal value contains more than 3 digits
Предупреждение этапа компиляции
(шестнадцатиричное значение содержит более 3 цифр)
В старых версиях Си шестнадцатиричная управляющая последовательность могла иметь не более трех цифр. Новый стандарт ANSI
допускает любое число цифр, лишь бы значение помещалось в байт.
Это сообщение выдается, когда шестнадцатиричная управляющая последовательность имеет много ведущих нулей (например, «x00045»).
Старые версии Си интерпретировали бы данную строку иначе.
функция_1 hides virtual function функция_2
Предупреждение этапа компиляции
(функция_1 скрывает виртуальную функцию_2)
Виртуальная функция базового класса обычно переопределяется
объявлением в производном классе. В данном случае объявление того
же имени с другими типами аргументов делает функцию недоступной
последующим производным классам.
— I —
Identifier expected
Сообщение об ошибке этапа компиляции
(требуется идентификатор)
Здесь ожидался идентификатор, но не был найден. В Си это может случиться в списке параметров старого заголовка функции, после резервируемых слов struct или union при отсутствии фигурных
скобок, а также при отсутствии имени поля структуры или объединения (за исключением битовых полей нулевой длины). В С++ после
двойного двоеточия (::) и после резервируемого слова operator при
отсутствии символа операции идентификатор также требуется в списке базовых классов, производным от которых является данный.
Identifier идентификатор cannot have a type qualifier
Сообщение об ошибке этапа компиляции:
(идентификатор «идентификатор» не может иметь квалификатор
типа)
Квалификатор С++ класс::идентификатор здесь неприменим. Квалификатор не разрешен для имен typedef, объявлений функций (за
исключением определения на уровне файла) или локальных переменных
и параметров функций, либо для элементов класса, за исключением
использования как квалификатора собственного имени класса (избыточно, но допустимо).
If statement missing (
Сообщение об ошибке этапа компиляции
(в операторе if отсутствует ()
В операторе if компилятор не нашел левой (открывающей) круглой скобки после ключевого слова if.
If statement missing )
Сообщение об ошибке этапа компиляции
(В операторе if отсутствует ))
В операторе if компилятор не нашел правой (закрывающей)
круглой скобки после выражения проверки.
If statement too long
Сообщение об ошибке утилиты MAKE
(слишком длинный оператор if)
Оператор if превышает 4096 символов.
Ifdef statement too long
Сообщение об ошибке утилиты MAKE
(слишком длинный оператор ifdef)
Оператор ifdef превышает 4096 символов.
Ifndef statement too long
Сообщение об ошибке утилиты MAKE
(слишком длинный оператор ifndef)
Оператор ifndef превышает 4096 символов.
Ignored модуль, path is too long
Предупреждение утилиты TLIB
(модуль игнорируется, слишком длинный маршрут)
Маршрут к заданному файлу .obj или .lib превышает 64 символа. Максимальный маршрут в TLIB не может превышать 64 символа.
Illegal ACBP byte in SEGDEF
Сообщение об ошибке утилиты TLINK
(недопустимый байт ACBP в SEGDEF)
Обычно это вызывается ошибкой транслятора.
Illegal character in constant expression выражение
Сообщение об ошибке утилиты MAKE
(неверный символ в константном выражении)
Обслуживающая программа МAKE обнаружила некоторый символ,
недопустимый для выражения-константы. Если этим символом является
буква, то это определяет (вероятно) идентификатор, где имеется
синтаксическая ошибка.
Illegal component to GRPDEF
Сообщение об ошибке утилиты TLINK
(недопустимый компонент GRPDEF)
Обычно это вызывается ошибкой транслятора.
Illegal group definition: группа
Сообщение об ошибке утилиты TLINK
(недопустимое определения группы)
Данная ошибка вызывается неверно сформированной записью
GRPDEF в файле .OBJ. Это может вызываться «самодельными» файлами
.OBJ или ошибкой транслятора, использованного для генерации файла
.OBJ. Если это происходит в файле, скомпилированном в Borland
C++, перекомпилируйте файл. При сохранении ошибки обратитесь к
фирме Borland.
Illegal initialization
Сообщение об ошибке этапа компиляции
(недопустимая инициализация)
Инициализация может выполняться либо выражением типа константы, либо адресом глобальной extern или static переменной плюс
или минус константа.
Illegal octal digit
Сообщение об ошибке этапа компиляции
(недопустимая восьмеричная цифра)
Компилятор встретил восьмеричную константу с недопустимой в
восьмеричных числах цифрой (8 или 9).
Illegal parameter to __emit__
Сообщение об ошибке этапа компиляции
(недопустимый параметр __emit__)
Вы указали аргумент emit, который не является константой или
адресом.
Illegal pointer substraction
Сообщение об ошибке этапа компиляции
(недопустимое вычитание указателя)
Выдается при попытке вычитания указателя из не указателя.
Illegal structure operation
Сообщение об ошибке этапа компиляции
(недопустимая операция со структурой)
Структуры могут использоваться только в операциях точки (.),
получения адреса (&) или присваивания (=), либо передаваться в
функции и из функций в качестве параметров. Компилятор встретил
структуру, используемую с какой-либо другой операцией.
Illegal to take address of bit field
Сообщение об ошибке этапа компиляции
(недопустимо получать адрес битового поля)
Недопустимо получать адрес битового поля, хотя получать адрес любых других полей можно.
Illegal use of floating point
Сообщение об ошибке этапа компиляции
(недопустимое использование плавающей точки)
Операнды с плавающей точкой недопустимы в операциях сдвига,
поразрядных булевских операциях, обращения по ссылке (*) и некоторых других операциях. Компилятор в качестве операнда одной из
этих операций обнаружил число с плавающей точкой.
Illegal use of member pointer
Сообщение об ошибке этапа компиляции
(недопустимое использование указателя-элемента)
Указатели на классы могут использоваться операциями присваивания, сравнения обращения по ссылке (*), ->*, ?:, && и ||. В исходном файле обнаружен указатель-элемент с какой-либо другой операцией.
Illegal use of pointer
Сообщение об ошибке этапа компиляции
(недопустимое использование указателя)
Указатели могут использоваться операциями сложения, вычитания, присваивания, обращения по ссылке (*) и стрелки (->). В исходном файле обнаружен указатель с какой-либо другой операцией.
Ill-formed pragma
Предупреждение этапа компиляции
(неправильно оформленная директива pragma)
Директива pragma не соответствует ни одной из ожидаемых компилятором директив этого рода.
Image base address must be a multiple of 0x10000
Сообщение об ошибке утилиты TLINK
(базовый адрес модуля должен быть кратен 0x10000)
Базовый адрес должен выравниваться на границу 64К.
Images fixed at specific addresses typically will not run under Win32s
Предупреждение TLINK
(Фиксированные на конкретные адреса модули обычно в Win32
обычно не работают)
В Win32s загружает все приложение в единое адресное пространство. Предсказать, куда будет загружено ваше приложение, невозможно, поскольку перед вашей программой могут загружаться другие программы. Фиксированные образы должны загружаться по заданным адресам, иначе загрузчик не сможет запустить их.
Implicit conversion of тип_1 to тип_2 not allowed
Сообщение об ошибке этапа компиляции
(неявное преобразование типа_1 к типу_2 не допускается)
Когда функция-элемент или класс вызываются с использованием
указателя на производный класс, значение указателя должно неявно
преобразовываться, чтобы указывать на соответствующий базовый
класс. В данном случае такое неявное преобразование недопустимо.
Improper use of typedef идентификатор
Сообщение об ошибке этапа компиляции
(неправильное использование typedef)
Там, где в выражении должна использоваться переменная, указан typedef идентификатор. Проверьте описание идентификатора и
возможные опечатки.
имя_файла(номер_строки): Incompatible attribute
Сообщение об ошибке утилиты TLINK
(несовместимый атрибут)
Компоновщик TLINK обнаружил в операторе CODE или DATA несовместимый атрибут сегмента. Например, PRELOAD и LOADONCALL одновременно не могут быть атрибутами одного и того же сегмента.
Incompatible type conversion
Сообщение об ошибке этапа компиляции
(Несовместимое преобразование типа)
Требуемое приведение типа невозможно.
Incorrect command-line argument: XXX
Сообщение о фатальной ошибке утилиты MAKE
(Неверный аргумент в командной строке: ХХХ)
Данная ошибка появляется, если обслуживающая программа МAKE
выполняется с неверным аргументом в командной строке.
Incorrect command-line option: параметр
Сообщение об ошибке этапа компиляции
(Неправильный параметр командной строки: параметр)
Компилятор не распознает параметр командной строки как допустимый параметр.
Incorrect configuration file option: параметр
Сообщение об ошибке этапа компиляции
(Неправильный параметр файла конфигурации: параметр)
Компилятор не распознает параметр файла конфигурации как допустимый параметр. Проверьте наличие предшествующего дефиса (-).
Incorrect number format
Сообщение об ошибке этапа компиляции
(Неправильный формат числа)
Компилятор обнаружил в шестнадцатиричном числе десятичную
точку.
Incorrect use of default
Сообщение об ошибке этапа компиляции
(Неправильное использование слова default)
Компилятор не нашел после ключевого слова default двоеточия.
Incorrect version of RLINK32.DLL
Сообщение об ошибке утилиты TLINK
(некорректная версия RLINK32.DLL)
Проверьте версию указанной DLL.
Initializing enumeration type with тип
Предупреждение этапа компиляции
(инициализация перечислимого типа указанным типом)
Вы пытаетесь инициализировать переменную enum другим типом.
Например:
enum count { zero, one, two } x = 2;
что приведет к данному предупреждению, поскольку 2 имеет тип int,
а не enum count. При присваивании или инициализации типов enum на
практике вместо литерального целочисленного значения при программировании лучше использовать идентификатор enum.
Это на самом деле ошибка, но она сводится к предупреждению,
чтобы программа могла работать.
Inline assembly not allowed
Сообщение об ошибке этапа компиляции
(встроенное ассемблер не разрешается)
Ваш исходный файл содержит операторы ассемблера, и вы пытаетесь скомпилировать его из интегрированной среды. Нужно использовать BCC.
Inline assembly not allowed in inline and template function
Сообщение об ошибке этапа компиляции
(встроенное ассемблирование во встраиваемой функции и функ ции-шаблоне запрещено)
Компилятор не может обрабатывать операторы встроенного ассемблирования внутри встраиваемых (inline) функций С++ или шаблонов. Ассемблерные операторы можно оформить в макрокоманду, либо
вы можете убрать класс памяти inline, или можно убрать встроенные
ассемблерные коды.
Int and string types compared
Сообщение об ошибке утилиты MAKE
(сравниваются строковый и целый типы)
В выражении !if или !elseif вы пытаетесь сравнить целочисленный операнд со строковым.
Internal linker error код_ошибки
Сообщение об ошибке утилиты TLINK
(внутренняя ошибка компоновщика)
Ошибка во внутренней логике TLINK. На практике такая ошибка
возникать не должна, но приведена здесь для полноты в случае генерации общей ошибки. Если ошибка сохраняется, запишите код ошибки и свяжитесь с Borland.
Invalid combination of opcode and operands
Сообщение об ошибке этапа компиляции
(Неверная комбинация кода операции и операндов)
Ассемблерный код операции не принимает данную комбинацию операндов. Возможные причины:
- Слишком много или мало операндов для данного кода опера ции, например INC AX,BX или MOV AX.
- Число операндов верное, но их типы не соответствуют коду
операции, например DEC 1, MOV AX,CL или MOV 1,AX.
Invalid entry point offset
Сообщение об ошибке утилиты TLINK
Данное сообщение выводится только при компоновке модулей с
32-битовыми записями. Это означает, что смещение начальной точки
входы программы превышает предел DOS в 32К.
Invalid indirection
Сообщение об ошибке этапа компиляции
(Недопустимое обращение по ссылке)
Операция обращения по ссылке (*) требует в качестве операнда
непустого (не void) указателя.
Invalid limit specified for code segment packingv
Сообщение об ошибке утилиты TLINK
(для упаковки сегмента кода задано недопустимое ограничение)
Данная ошибка происходит, если вы использовали параметр /P
или команду интегрированной среды Options Linker …Pack code
segments и задаете предельное значение размера, выходящее за допустимый диапазон. Чтобы значение было допустимым, оно должно лежать в пределах от 1 до 65536 байт (по умолчанию 8192).
Invalid macro argument separator
Сообщение об ошибке этапа компиляции
(Недопустимый разделитель аргументов макрокоманды)
В определении макрокоманды аргументы должны разделяться запятыми. Компилятор встретил после последнего имени аргумента другой символ разделителя.
Invalid page size value igored
Предупреждение утилиты TLIB
(недопустимое значение размера страницы игнорируется)
Задано недопустимое значение размера страницы. Размер страницы должен быть степенью числа 2 и не может быть меньше 16 или
больше 32768.
Invalid pointer addition
Сообщение об ошибке этапа компиляции
(Недопустимое сложение указателей)
В исходном файле встретилась попытка сложения двух указателей.
Invalid register combination (e.g. [BP+BX])
Сообщение об ошибке этапа компиляции
(Неверная комбинация регистров (например, [BP+BX]))
Допустимыми комбинациями индексных регистров являются [BX],
[BP], [SI], [DI], [BX+SI], [BX+DI], [BP+SI] и [BP+DI]. Другие
комбинации индексных регистров (например, [AX], [BP+BX] и
[SI+DX]) недопустимы.
Локальные переменные (переменные, объявленные в процедурах и
функциях) обычно выделяются в стеке и доступны через регистр BP.
Ассемблер автоматически прибавляет [BP] при ссылках к таким переменным, поэтому даже хотя конструкция типа Local[BX] (где Local это локальная переменная) кажется верной, это не так, поскольку
последний операнд на самом деле станет равным Local[BP+ BX].
Invalid segment definition
Сообщение об ошибке утилиты TLINK
(недопустимое определение сегмента в указанном модуле)
Компилятором создан неверный объектный файл. Если это происходит в файле, созданном Borland C++, перекомпилируйте файл. Если
ошибка остается, свяжитесь с Borland.
Invalid template argument list
Сообщение об ошибке этапа компиляции
(недопустимый список аргументов шаблона)
В описании шаблона за ключевым словом template должен следовать список формальных аргументов, заключенных в угловые скобки
(<>). Найден недопустимый список аргументов шаблона.
Invalid template qualified name шаблон::имя
Сообщение об ошибке этапа компиляции
(недопустимое уточненное имя шаблона)
При определении элемента шаблона класса фактические аргументы имени шаблона класса, которые указываются в левом операнде
операции ::, должны соответствовать формальным аргументам класса
шаблона, например:
template <class T> class X { VOID F(); }; template <class T> void X<T>::f() {}
Следующее недопустимо:
template <class T> void X<int>::f() {}
Invalid use of dot
Сообщение об ошибке этапа компиляции
(Недопустимое использование точки)
За операцией «точка» (.) должен непосредственно следовать
операнд.
Invalid use of template шаблон
Сообщение об ошибке этапа компиляции
(недопустимое использование шаблона)
Вне определения шаблона не допускается использование имени
шаблона класса без указания фактических параметров. Например, вы
можете использовать vector<int>, но не vector.
Irreducible expression tree
Фатальная ошибка этапа компиляции
(неупрощаемое дерево выражения)
Это сообщение указывает на некоторую ошибку компилятора. Выражение в указанной строке исходного файла вызвало условие, когда
генератор кода не может выполнить свою работу. Как бы это выражение ни было необходимым, его следует переписать. В случае, если
вы получите такое сообщение, уведомьте об этом фирму Borland.
базовый_класс is indirect virtual base class of класс
Сообщение об ошибке этапа компиляции
(базовый_класс является недопустимым виртуальным базовым
классом для класса класс)
Невозможно создать указатель на элемент С++ заданного виртуального класса. Была попытка создания такого указателя (непосредственно или через приведение). См. описание параметра -Vv в
«Руководстве пользователя».
идентификатор is assigned a value that is never user
Предупреждение этапа компиляции
Переменная встречается в присваивании, но не используется в
функции в завершившейся функции. Предупреждение указывает только,
что компилятор обнаружил закрывающую фигурную скобку.
идентификатор is declared as both external and static
Предупреждение этапа компиляции
(идентификатор объявлен сразу как external и static)
Данный идентификатор появился в объявлении, неявно или явно
обозначающем его как global или external, и кроме того, в объявлении, обозначающем его как static. Идентификатор в таком случае
считается static. Проверьте все описания данного идентификатора.
идентификатор is declared but never used
Предупреждение этапа компиляции
(идентификатор описан, но не используется)
В программе описано имя переменной, но эта переменная не используется. Сообщение указывает, что компилятор обнаружил закрывающую скобку сложного оператора или функции. Описание переменной
находится в начале этого оператора или функции.
конструктор is not a base class of класс
Сообщение об ошибке этапа компиляции
(конструктор не относится к базовому классу класс)
Конструктор класса С++ класс пытается вызвать конструктор
базового класса конструктор, либо вы пытаетесь изменить права
доступа класс::конструктор. Конструктор не относится к базовому
классу класс. Проверьте объявления.
идентификатор is not a member of struct
Сообщение об ошибке этапа компиляции
(идентификатор не является элементом структуры)
Вы пытаетесь сослаться на идентификатор, как на элемент
структуры, в то время как он не является элементом структуры.
Проверьте объявления.
идентификатор is not a non-static data member and can’t be initialized here
Сообщение об ошибке этапа компиляции
В инициализаторах инициализироваться конструктором могут
только данные-элементы. Это сообщение означает, что список включает в себя статический элемент или функцию-элемент.
идентификатор is not a parameter
Сообщение об ошибке этапа компиляции
(идентификатор не является параметром)
В разделе объявления параметров определения функции по образцу старых версий идентификатор объявлен, но не перечислен в
списке параметров. Либо уберите объявление, либо добавьте идентификатор в качестве параметра.
тип is not a polimorphic class type
Сообщение об ошибке этапа компиляции
(тип не является типом полиморфического класса)
Dynamic_cast использовалось с указателем на класс, который
компилировался с запрещенным параметром -RT.
идентификатор is not a public base class of тип_класса
Сообщение об ошибке этапа компиляции
Правый операнд операции .*, ->* или ::operator не был указателем на элемент класса, который идентичен (или неоднозначен)
доступному базовому классу типа операнда в левой части.
имя_файла is not a valid library
Предупреждение утилиты TLINK
(файл не является допустимой библиотекой)
Данный файл не является библиотечным модулем.
элемент is not accessible
Сообщение об ошибке этапа компиляции
(элемент недоступен)
Вы пытаетесь сослаться на элемент класса С++, который имеет
атрибут доступа private или protected и недоступен из данной
функции. Это иногда случается при попытке вызова доступной переопределенной функции-элемента (или конструктора), когда заданные
при этом аргументы совпадают с аргументами недоступной функции.
Перед проверкой доступности всегда выполняется проверка разрешения переопределения. Если проблема именно в этом, то для выбора
желаемой доступной функции попытайтесь явно выполнить приведение
типа для одного или более параметров.
Назад | Содержание | Вперед
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <iostream> #include <windows.h> #include "registry.hpp" #include <setupapi.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #pragma argsused using namespace std; int main(int argc, char* argv[]) { //--------------------------------------------------------------------------- { cout<< "AutoArchive C:" ; //char str[21] = "nНачало"; char buf[21]; //CharToOem(str, buf); cout << buf << endl; } //--------------------------------------------------------------------------- { TRegistry *reg = new TRegistry(); reg->RootKey=HKEY_CURRENT_USER; reg->OpenKey("Software\Microsoft\Windows\CurrentVersion\Run",true); reg->WriteString("AutoArchive",Application->ExeName); //reg->WriteString("AutoArchive",argv[0]); reg->CloseKey(); system ("pause"); } //--------------------------------------------------------------------------- bool enable_adapter(bool enable) { HDEVINFO Devs=INVALID_HANDLE_VALUE; wchar_t * CLASSID_NetworkAdapter = L"{4d36e972-e325-11ce-bfc1-08002be10318}"; GUID guid; CLSIDFromString(CLASSID_NetworkAdapter, &guid); Devs = SetupDiGetClassDevs(&guid, NULL, NULL, DIGCF_PRESENT); if (Devs == INVALID_HANDLE_VALUE) goto failed; SP_DEVINFO_DATA devInfo; devInfo.cbSize = sizeof(SP_DEVINFO_DATA); if (!SetupDiEnumDeviceInfo(Devs, 0, &devInfo)) goto failed; else // имя { char buff[256]; DWORD lenbuff; SetupDiGetDeviceRegistryProperty(Devs, &devInfo, SPDRP_SERVICE, NULL, (byte *)buff, 256, &lenbuff); //LabelResult->Caption = "device: "+(AnsiString) buff ; } SP_PROPCHANGE_PARAMS pcp; if(enable) { pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; pcp.StateChange = enable ? DICS_ENABLE : DICS_DISABLE; pcp.Scope = DICS_FLAG_GLOBAL; pcp.HwProfile = 0; if (SetupDiSetClassInstallParams(Devs, &devInfo, &pcp.ClassInstallHeader, sizeof(pcp))) SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, Devs, &devInfo); } pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; pcp.StateChange = enable ? DICS_ENABLE : DICS_DISABLE; pcp.Scope = DICS_FLAG_CONFIGSPECIFIC; pcp.HwProfile = 0; if(!SetupDiSetClassInstallParams(Devs,&devInfo,&pcp.ClassInstallHeader,sizeof(pcp)) || !SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,Devs,&devInfo)) // failed to invoke DIF_PROPERTYCHANGE goto failed; SP_DEVINSTALL_PARAMS devParams; devParams.cbSize = sizeof(devParams); if(SetupDiGetDeviceInstallParams(Devs,&devInfo,&devParams) && (devParams.Flags & (DI_NEEDRESTART|DI_NEEDREBOOT))) { // see if device needs reboot ShowMessage("see if device needs reboot"); goto failed; } //else ;// appears to have succeeded //LabelResult->Caption = LabelResult->Caption +" - "+IntToStr(enable) ; //enable ? " enabled!" : " disabled!"; SetupDiDestroyDeviceInfoList(Devs); return true; failed: SetupDiDestroyDeviceInfoList(Devs); return false; } //--------------------------------------------------------------------------- { enable_adapter(false); getchar(); system ("pause"); } //--------------------------------------------------------------------------- { enable_adapter(true); getchar(); system ("pause"); } //--------------------------------------------------------------------------- return 0; } //--------------------------------------------------------------------------- |
Содержание
- Using namespace std declaration syntax error
- Using namespace std declaration syntax error
- Using namespace std declaration syntax error
- Using namespace std declaration syntax error
Using namespace std declaration syntax error
всем здрасте.
предыстория
Решил самостоятельно С НУЛЯ изучить с++ по самоучителю «С++ без страха» Б. Оверленд 2005г.
Код пишу в «Borland C++ v 4.5»
Microsoft Visual C++ или Borland C++ Builder планирую начать использовать позже, когда появятся навык написания кода в простой среде разработки. чтоб ошибки программирования не путались с ошибками использования среды разработки. )) за это прошу не критиковать.
это была предыстория вопроса
вот код программы
вопрос 1.
using namespace std
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую.
у меня в коде эта строка закомментирована потому что с ней не проходит компиляция. Пишет ошибка: «Declaration syntax error».
если закомментировать, то все работет нормально. при этом я же не прописываю вывод на экран std::cout хотя по книжке я именно так должен был сделать т.к. не прописал using?
в чем проблемма?
вопрос 2.
код тот же. У меня написано «iostream.h». А в книге говорят что надо писать без «*.h «, а без такого окончания опять не проходит компиляция. пишет что не может открыть файл iostream
в чем проблемма?
вопрос 3.
Еще проблемма с выводом русских букв на экран. Типа «cout
ответ 1
если используешь std, то нужно подключать не #include , а #include . И вобще, эту привычку, в std-ных инклудах .h добавлять лучше не заводить
ответ 2
а вот это не знаю. у меня при #include прекрасно все работает.
хотя «Borland C++ v 4.5» у меня вызыват подозрения. ОЧЕНЬ старый, с тех пор компиляторы хорошо поменялись. лучше уж на VC 6.0 или билдере начиная с 6го пиши
ответ 3.
мой совет — пиши на инглише или транслитом.
но если хочется, то в свойствах компилятора это было, но не помню, где.
может кто другой ответит
Источник
Using namespace std declaration syntax error
всем здрасте.
предыстория
Решил самостоятельно С НУЛЯ изучить с++ по самоучителю «С++ без страха» Б. Оверленд 2005г.
Код пишу в «Borland C++ v 4.5»
Microsoft Visual C++ или Borland C++ Builder планирую начать использовать позже, когда появятся навык написания кода в простой среде разработки. чтоб ошибки программирования не путались с ошибками использования среды разработки. )) за это прошу не критиковать.
это была предыстория вопроса
вот код программы
вопрос 1.
using namespace std
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую.
у меня в коде эта строка закомментирована потому что с ней не проходит компиляция. Пишет ошибка: «Declaration syntax error».
если закомментировать, то все работет нормально. при этом я же не прописываю вывод на экран std::cout хотя по книжке я именно так должен был сделать т.к. не прописал using?
в чем проблемма?
вопрос 2.
код тот же. У меня написано «iostream.h». А в книге говорят что надо писать без «*.h «, а без такого окончания опять не проходит компиляция. пишет что не может открыть файл iostream
в чем проблемма?
вопрос 3.
Еще проблемма с выводом русских букв на экран. Типа «cout
ответ 1
если используешь std, то нужно подключать не #include , а #include . И вобще, эту привычку, в std-ных инклудах .h добавлять лучше не заводить
ответ 2
а вот это не знаю. у меня при #include прекрасно все работает.
хотя «Borland C++ v 4.5» у меня вызыват подозрения. ОЧЕНЬ старый, с тех пор компиляторы хорошо поменялись. лучше уж на VC 6.0 или билдере начиная с 6го пиши
ответ 3.
мой совет — пиши на инглише или транслитом.
но если хочется, то в свойствах компилятора это было, но не помню, где.
может кто другой ответит
Источник
Using namespace std declaration syntax error
всем здрасте.
предыстория
Решил самостоятельно С НУЛЯ изучить с++ по самоучителю «С++ без страха» Б. Оверленд 2005г.
Код пишу в «Borland C++ v 4.5»
Microsoft Visual C++ или Borland C++ Builder планирую начать использовать позже, когда появятся навык написания кода в простой среде разработки. чтоб ошибки программирования не путались с ошибками использования среды разработки. )) за это прошу не критиковать.
это была предыстория вопроса
вот код программы
вопрос 1.
using namespace std
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую.
у меня в коде эта строка закомментирована потому что с ней не проходит компиляция. Пишет ошибка: «Declaration syntax error».
если закомментировать, то все работет нормально. при этом я же не прописываю вывод на экран std::cout хотя по книжке я именно так должен был сделать т.к. не прописал using?
в чем проблемма?
вопрос 2.
код тот же. У меня написано «iostream.h». А в книге говорят что надо писать без «*.h «, а без такого окончания опять не проходит компиляция. пишет что не может открыть файл iostream
в чем проблемма?
вопрос 3.
Еще проблемма с выводом русских букв на экран. Типа «cout
ответ 1
если используешь std, то нужно подключать не #include , а #include . И вобще, эту привычку, в std-ных инклудах .h добавлять лучше не заводить
ответ 2
а вот это не знаю. у меня при #include прекрасно все работает.
хотя «Borland C++ v 4.5» у меня вызыват подозрения. ОЧЕНЬ старый, с тех пор компиляторы хорошо поменялись. лучше уж на VC 6.0 или билдере начиная с 6го пиши
ответ 3.
мой совет — пиши на инглише или транслитом.
но если хочется, то в свойствах компилятора это было, но не помню, где.
может кто другой ответит
Источник
Using namespace std declaration syntax error
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.10.2007
Репутация: нет
Всего: нет
Решил самостоятельно С НУЛЯ изучить с++ по самоучителю «С++ без страха» Б. Оверленд 2005г.
Код пишу в «Borland C++ v 4.5»
Microsoft Visual C++ или Borland C++ Builder планирую начать использовать позже, когда появятся навык написания кода в простой среде разработки. чтоб ошибки программирования не путались с ошибками использования среды разработки. )) за это прошу не критиковать.
это была предыстория вопроса 😉
вот код программы
chelser |
|
||
Код |
#include //using namespace std; |
int main() <
cout
using namespace std
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую.
у меня в коде эта строка закомментирована потому что с ней не проходит компиляция. Пишет ошибка: «Declaration syntax error».
если закомментировать, то все работет нормально. при этом я же не прописываю вывод на экран std::cout хотя по книжке я именно так должен был сделать т.к. не прописал using?
в чем проблемма?
код тот же. У меня написано «iostream.h». А в книге говорят что надо писать без «*.h «, а без такого окончания опять не проходит компиляция. пишет что не может открыть файл iostream
в чем проблемма?
Еще проблемма с выводом русских букв на экран. Типа «cout
|
(нет голосов)
Загрузка .
Эксперт
Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва
Репутация: 51
Всего: 70
Цитата(chelser @ 10.10.2007, 13:59 |
у меня в коде эта строка закомментирована потому что с ней не проходит компиляция. Пишет ошибка: «Declaration syntax error». |
если закомментировать, то все работет нормально. при этом я же не прописываю вывод на экран std::cout хотя по книжке я именно так должен был сделать т.к. не прописал using?
в чем проблемма?
Цитата(chelser @ 10.10.2007, 13:59 |
Код пишу в «Borland C++ v 4.5» |
Microsoft Visual C++ или Borland C++ Builder планирую начать использовать позже, когда появятся навык написания кода в простой среде разработки. чтоб ошибки программирования не путались с ошибками использования среды разработки. )) за это прошу не критиковать.
Цитата(chelser @ 10.10.2007, 13:59 |
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую. |
Цитата(chelser @ 10.10.2007, 13:59 |
код тот же. У меня написано «iostream.h». А в книге говорят что надо писать без «*.h «, а без такого окончания опять не проходит компиляция. пишет что не может открыть файл iostream |
в чем проблемма?
Цитата(chelser @ 10.10.2007, 13:59 |
|
Еще проблемма с выводом русских букв на экран. Типа «cout |
|
трололомен
Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур
Репутация: 2
Всего: 306
Код |
#include using namespace std; |
int main() <
cout
а что бы русский шрифт в консоли работал номано юзай chelser функцию CharToOem
Это сообщение отредактировал(а) mrbrooks — 10.10.2007, 13:43
akizelokro |
|
||
Крокодил Профиль Репутация: 1
Borland C++ был выпущен в 1994 году. STL была включена в стандарт С++ весной 1994 года. Трудно требовать от компилятора полной поддержки стандарта, если компилятор писался во время или сразу после «по горячим следам» изменений стандарта. Но если ты собираешься изучать стандарт, то как начинающий начинающему посоветую поменять компилятор на более свежий. |
|||
|
Daevaorn |
|
||
Эксперт Профиль Репутация: 51
|
|||
|
mrbrooks |
|
||
трололомен Профиль Репутация: 2 |
|||
|
Эксперт
Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев
Репутация: 21
Всего: 25
Daevaorn, ты и сам ВСЕГДА пишешь std:: перед стандартными функциями?
тут же речь о мелких прогах идет, тут еще можно.
главное, не зацикливаться, ибо в больших проектах, согласен, std:: писать надо.
Alek86 |
|
||
|
Daevaorn |
|
|||
Эксперт Профиль Репутация: 51
|
||||
|
SergeCpp |
|
||
Профиль Репутация: 15 Удивительно (и очень часто встречаю) — неужели является секретом имя автора C++? Почему изучение начинается с книг весьма и весьма экстравагантных. Почему бы не приобрести оригинал. Слухи о трудности книги Страуструпа (если они повлияли на выбор) — весьма преувеличены |
|||
|
Greeen |
|
||
Опытный Профиль Репутация: 7 |
|||
|
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.10.2007
Репутация: нет
Всего: нет
chelser |
|
||
Цитата |
SergeCpp, поддерживаю. Иногда диву даешься сколько всякий «С++ без проблем», «С++ бархатный путь» и еще всяких извращений на полках книжных магазинов. А реально стоящих книг раз-два и все. |
Не совсем с вами согласен. Книги на которые вы ссылаетесь не спрю лучше, но информация в них преподносится так будто ее читающий минимум чемпион мира по программированию. Чайнику в данном вопросе очень трудно понять изложенную информацию. Выбор данной книги обусловлен исключительно вышеизложенным. Конечно после того как войду в курс дела воспользуюсь более серьезной литературой.
Добавлено через 3 минуты и 21 секунду
т.е. насколько я понял, то все мои вопросы сходятся к тому что я использую устаревший компилятор?
Добавлено через 6 минут и 45 секунд
Цитата |
то как начинающий начинающему посоветую поменять компилятор на более свежий. |
SergeCpp |
|
||
Профиль Репутация: 15
Я был чайником в данном вопросе (C++) Взял и прочитал дома, тихо, спокойно, 1-е издание (самое старое) — полностью всё Потом купил 2-е издание (в двух томах), таким же образом прочёл его — полностью всё Сложностей при чтении особых не встретил Интернетов с форумами не было да и незачем это (думать самому нужно) |
|||
|
Daevaorn |
|
|||||
Эксперт Профиль Репутация: 51
|
||||||
|
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.10.2007
Репутация: нет
Всего: нет
chelser |
|
||
|
archimed7592 |
|
|||
Архимед Профиль Репутация: 58
Я вот всегда пишу — у меня это уже рефлекс. Даже в форумах, 2-3 строчные примеры пишу с std.
|
||||
|
akizelokro |
|
||
Крокодил Профиль Репутация: 1
|
|||
|
archimed7592 |
|
|||
Архимед Профиль Репутация: 58
Некоторые руководства, думаю, расчитанные не на новичка, которые редко знают о возможности ограничить scope или не догадываются, что если и советуют писать using blablabla , то ни в коем случае не в заголовочном файле и т.д.
|
||||
|
Dronchik |
|
||
Звукач ёмаё Профиль Репутация: 0
char qwerty[10]; |
Добавлено через 3 минуты и 3 секунды
Локаль жрёт меньше ресурсов
Вместо слов делай дело, от которого ты фанатеешь. (с)
zkv |
|
|||||
Профиль Репутация: 26
|
||||||
|
akizelokro |
|
|||||
Крокодил Профиль Репутация: 1
Аргумент небезупречен. Что-то я не встречал «Не пишите никогда using namespace std; а потом просто cout — это плохо, пишите только std::cout — это хорошо».
это аргумент. Но у меня, новичка, не возникло бы никаких вопросов, если бы в начала цитаты не было бы слов «по возможности».
Прочитал. Более-менее серьезные аргументы в том, что не «засоряется» (кавычки мои) глобальное пространство имен и ускоряется компиляция. Про время компиляции, — поверю. По слову «засоряется», я все-таки поверю штатским тестовым сайтам, как они будут оформлять задачи по стандартной библиотке, которую эксперт должен знать наизусть. Давайте, предупреждение у меня уже есть. Модерируйте. |
||||||
|
archimed7592 |
|
||
Архимед Профиль Репутация: 58
В задачках как правило используется не самый лучший стиль. Цель задачи описать проблему наиболее кратко и получить ответ на вопрос «умеет ли соискатель решать такого рода проблемы?». Засоряется оно очень даже хорошо. Не раз сталкивался. |
|||
|
Mal Hack |
|
||
Мудрый. Профиль Репутация: 2 Я проше прощения за поднятие старой темы, но вопрос по сабжу. |
|||
|
Lazin |
|
||
Эксперт Профиль Репутация: 41 |
|||
|
Эксперт
Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008
Репутация: 11
Всего: 36
Rififi |
|
||
Цитата(chelser @ 10.10.2007, 12:59 |
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую. |
Mal Hack |
|
||
Мудрый. Профиль Репутация: 2 |
|||
|
Ulysses4j |
|
||
Опытный Профиль Репутация: 4
Простите, позволю себе также ответить на поставленный вопрос: Герберт Шилдт — ламер. Последний перл: этот человек во вступлении к книжке по последней Java (6-ой, значится) все еще рассуждает на тему, является ли Java япом для интернета. Откопал экскременты мамонта, называется. По сабжу: разницы нет. Все обращения, которые разнятся наличием квалификации пространства имен, связываются с объектами этих пространств имен на этапе компиляции. Упрощенно ситуацию можно представить так: на месте обращения к cout (квалифицированного или нет) компилятор вписывает адрес объекта. Пространства имен позволяют помочь компилятору понять, какой именно адрес написать (если имен cout несколько в разных пространствах имен). Как именно cout приписано к пространству имен (using или std::cout) компилятору неважно, лишь бы конфликтов не было. Он впишет нужный адрес и точка. По сабжу выше: писать директивы включения пространст имен (using namespace . ) это nasty. Плохо, типа. В стендовых примерах можно. Ну, в тестовых рутинах, если очень уж неймется, с натяжкой. Но в продакш коде («библиотечном коде») никогда. Это сообщение отредактировал(а) Ulysses4j — 11.7.2008, 05:29 |
|||
|
JackYF |
|
||
полуавантюрист Профиль Репутация: 18 |
|||
|
Henpyxa |
|
||
Профиль Репутация: нет почитал, поржал.. и так и не дали вразумительного ответа, хорошо или плохо писать в начале кода using namespace блаблабла; |
|||
|
любитель
Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006
Репутация: 144
Всего: 250
Henpyxa, если приблизить к Вашему стилюм, то вот так себя чувствует компилятор:
берет cout , думает кто ж это такой, благо находит подходящий только в std:: и успокаивается, значит это он.
берет cin, думает кто ж такой? находит один в std:: и один в anynamespace:: и озадачивает себя и программиста вопросом, а кой же использовать ?!
берет std::cin и без всяких раздумий использует его
mes |
|
||
|
azesmcar |
|
|||
uploading. Профиль Репутация: 81
А ты Саттера попробуй
Его нет, это вопрос предпочтений. Что точно можно сказать так это то, что в заголовочных файлах using писать НЕ хорошо, а в cpp пиши если хочешь. Как будет удобно. |
||||
|
boostcoder |
|
||
pattern`щик Профиль Репутация: 49 особенно весело бывает когда раскрываешь несколько namespace`ов, к примеру std, boost, boost::asio, boost::asio::ip::tcp. вот тогда-то и начинается все веселье Это сообщение отредактировал(а) boostcoder — 9.10.2010, 14:17 |
|||
|
Шустрый
Профиль
Группа: Участник
Сообщений: 89
Регистрация: 22.8.2007
Репутация: 2
Всего: 2
я всегда пишу в заголовке using std::something.
или если тип внутри класса юзается определяю новое имя через typedef
typedef std::Something _tSomething;
и дальше в коде использую Something.
Мне кажется в коде каждый раз писать namespace name тоже не очень кашерно. Для std::cout ещё ничего смотрится, но если там вложенные namespace-ы? например boost::unit_test::something — мне что каждый раз тятнуть за собой эту тягомотину?
но одно верно «using namespace std» — это зло.
Master01 |
|
||
|
azesmcar |
|
||
uploading. Профиль Репутация: 81
Это сообщение отредактировал(а) azesmcar — 9.10.2010, 14:20 |
|||
|
boostcoder |
|
|||
pattern`щик Профиль Репутация: 49
|
||||
|
любитель
Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006
Репутация: 144
Всего: 250
mes |
|
||
Цитата(azesmcar @ 9.10.2010, 13:15 |
что в заголовочных файлах using писать НЕ хорошо, а в cpp пиши если хочешь. Как будет удобно. |
дело даже не в заголовочных файлах а в области видимости..
в общем надо делать так чтоб «других» твои раскрытия видимости не коснулись..
«других» это не людей, а фрагментов кодов имеющих свою логику.. они могут быть как в одном файле , так и в разных..
Шустрый
Профиль
Группа: Участник
Сообщений: 89
Регистрация: 22.8.2007
Репутация: 2
Всего: 2
Master01 |
|
||
Цитата(Master01 @ 9.10.2010, 14:17 |
но одно верно «using namespace std» — это зло. |
azesmcar, наверно, я всё же слишком безапеляционно высказался насчёт «using namespace std.»
Мне почему-то кажется, что вы готовы из рукава вытащить тройку-другую контраргументов для меня которые, в свою очередь, также можно контраргументировать .
Правельнее было бы сказать, что Я предпочитаю такой подход не использовать, однако, не настаиваю, что моё мнение единственно правельное.
Однако, по вашему вопросу — я так не пишу из 2х соображений:
1. Не очень будет приятно если что-то из std или из другого «густонаселённого» namespace-а начнёт конфликтовать с чем-то таким же загадочным из другого namespace-а.
2. Так более понятно какой именно функционал из какого namespace-а используется в данном модуле.
Добавлено через 11 минут и 46 секунд
Цитата(boostcoder @ 9.10.2010, 14:19) |
Цитата(Master01 @ 9.10.2010, 14:17 |
boost::unit_test::something — мне что каждый раз тятнуть за собой эту тягомотину? |
Код |
namespace but = boost::unit_test; . but::something |
boostcoder, спасибо. Интересный вариант.
Единственное, что меня смущает это не запутается ли, читающий код человек, в таком лабиринте namespace-ов?
Просто, все знают что такое boost::unit_test, а вот but придётся поискать определние. Если предположить что таких «петель» много, то можно основательно запутаться, наверно . хотя, так во всём, если подходить к проблеме бездумно.
Henpyxa |
|
|||
Профиль Репутация: нет
я не знаю что это такое к слову сказать, а где можно посмотреть-поизучать внутренности нэймспэйсов? а насчет книги.. заметил где-то на форуме сообщение про http://worldcpp.vingrad.ru/, почитал, понравилось хотя материала и много, но все же маловато для полного понимания азов. хотя бы про классы в С++: пытался написать простенькую программку, используя знания, полученные от чтения фака, что-то типа
int main() |
и не вкурю никак про ошибку Run-Time Check Failure #3 — The variable ‘iSellPrice’ is being used without being defined. недостаточно там написано про классы и в шапке все-таки использовал using namespace std;
имхо, удобней указать один раз в маленьком коде, чем каждый раз втыкать перед cout’ами и cin’ами. про длинные коды даже страшно думать..
Crafty |
|
|||
Опытный Профиль Репутация: 2 Добавлено через 4 минуты и 56 секунд
Это сообщение отредактировал(а) Crafty — 9.10.2010, 17:35 |
||||
|
boostcoder |
|
|||
pattern`щик Профиль Репутация: 49
|
||||
|
azesmcar |
|
|||
uploading. Профиль Репутация: 81
Да нет, для этого аргументов не нужно. Аргументы нужны для обоснования того, что using namespace — зло
|
||||
|
любитель
Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006
Репутация: 144
Всего: 250
mes |
|
||
Цитата(Henpyxa @ 9.10.2010, 15:56 |
удобней указать один раз в маленьком коде, |
в маленьком учебном или «для себя» коде можно вообще писать как угодно..
а вот если проект чуть побольше, то зачем создавать потенциальные проблемы,
если с cout и cin достаточно уникальны и проблем не будет, но вот тот же vector есть в куче разных библиотек..
и мало того что раскрытые имена могут создать неопределенность для компилятора, так и программисту с ходу не сразу будет понятно о чем речь..
Цитата(Henpyxa @ 9.10.2010, 15:56 |
чем каждый раз втыкать |
вспомните народную мудрость «подальше положишь — поближе возьмешь».
Цитата(Master01 @ 9.10.2010, 15:25 |
вот but придётся поискать определние. |
используемые синонимы неймспейсов легче запомнить, раз два и обчелся, чем уследить за всеми сущностями раскрытых пространств..
вобщем найдите хороший компромис, и код будет красивым и удобным
bsa |
|
||
Эксперт Профиль Репутация: 63
На самом деле, в случае использования using namespace произойдет следующее: взяли пару стеллажей (количество пространств + глобальное + локальное) и вывалили все его содержимое в кучу, затем сказали компилятору, а нука найди мне cout в этой кучи. Лично я считаю, что using namespace: |
|||
|
любитель
Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006
Репутация: 144
Всего: 250
mes |
|
||
Цитата(bsa @ 10.10.2010, 10:28 |
взяли пару стеллажей (количество пространств + глобальное + локальное) и вывалили все его содержимое в кучу, затем сказали компилятору, а нука найди мне cout в этой кучи. |
добавлю (хотя и было уже сказано) что если компилятору все равно в какой кучи искать, то программисту уследить за всеми связями в такой неразбирихи довольно сложно..
Henpyxa |
|
||
Профиль Репутация: нет
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn
[ Время генерации скрипта: 0.2951 ] [ Использовано запросов: 21 ] [ GZIP включён ] Источник Читайте также: Operation upload firmware error 113 pandora Adblock |
I am trying to create this function in Borland C++ v3.1 but it gives me the error «Declaration Syntax Error». Can anyone help me with this error?
bool f(bool* b)
{
}
Yu Hao
118k44 gold badges232 silver badges287 bronze badges
asked Jun 11, 2013 at 15:01
4
Put this at the top of your source file. If it works after that, then Borland c++
simply doesn’t support bool
type. If not, I have no clue why you get Syntax error.
typdef byte bool;
#define true 1
#define false 0
answered Jun 11, 2013 at 15:09
Not AmusedNot Amused
9122 gold badges9 silver badges28 bronze badges
Сообщения без ответов | Активные темы | Избранное
|
[Borland C++ 3.1] Непонятки с шаблоном
|
||
27/04/09 |
Вот мой код: /* mylist.h */ /* mylist.cpp */ Declaration syntax error вот в какой строке: T List<T>::find(T *e) { // и т. д. (курсор на букве T, т. е. фактически между ней и звёздочкой) Ничего не понимаю.
|
||
|
|||
venco |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
04/05/09 |
Добавьте typename: template <class T>
|
||
|
|||
arseniiv |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
27/04/09 |
BC написан раньше принятия стандарта и typename не включает. Отделил TNode отдельным шаблоном, необходимое переписал, и теперь две аналогичные ошибки (nеперь в заголовочном файле) вот где: c lass T>
|
||
|
|||
Circiter |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
26/07/09 |
2arseniiv Самым простым решением (для первоначальной задачки) будет определение проблемных функций прямо в объявлении их класса (inline).
|
||
|
|||
arseniiv |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
27/04/09 |
Всё равно Declaration syntax error. Как в последнем случае.
|
||
|
|||
EtCetera |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
28/04/09 |
arseniiv А если вообще избавиться от *.cpp-файла и перенести реализации всех функций в *.h-файл, разместив их сразу после объявления класса?
|
||
|
|||
arseniiv |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
27/04/09 |
Тогда ошибка ещё и в том месте определения шаблона для реализации конструктора.
|
||
|
|||
EtCetera |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
28/04/09 |
Я (кажется) понял. У Вас в первоначальном варианте декларация структуры TNode находится в разделе private и снаружи этот тип «не виден». Хотя… Все равно выдается похожая ошибка… Странно. По поводу измененного варианта (вынесение TNode в виде отдельного шаблона). Вот такой код у меня компилируется: #ifndef MYLIST_H #define MYLIST_H #include <stddef.h> template <class T> template <class T> template <class T> #endif
|
||
|
|||
arseniiv |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
27/04/09 |
А на чём вы компилировали? Ведь это только, наверно, с BC3.1 такая проблема. Пока что я обратно восстановил всё к первоначальному виду, в котором использовался класс элемента.
|
||
|
|||
EtCetera |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
28/04/09 |
arseniiv А на чём вы компилировали? На VS 2008.
|
||
|
|||
arseniiv |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
27/04/09 |
Нет, у меня был в точности такой же в одно из времён.
|
||
|
|||
EtCetera |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
28/04/09 |
arseniiv Не могли бы Вы все же попытаться скомпилировать именно тот код, который я привел? Ради чистоты эксперимента. Хотя, может быть, это у меня под вечер синдром Фомы разыгрался…
|
||
|
|||
arseniiv |
Re: [Borland C++ 3.1] Непонятки с шаблоном
|
||
27/04/09 |
Я уверен, что там тот же код, что был когда-то некомпилирующимся с вероятностью 1. Всё же, идеальных компиляторов, наверно, не бывает.
|
||
|
|||
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
#if !defined(__PICTURE_H)
#define __PICTURE_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#define fntNORMAL 0
#define fntBOLD 1
#define fntSCRIPT 2
typedef unsigned Word; /* At least two bytes (16 bits) */
typedef unsigned char Byte; /* Exactly one byte (8 bits) */
typedef struct {
Word LocalScreenWidth,
LocalScreenHeight;
Byte GlobalColorTableSize : 3,
SortFlag : 1,
ColorResolution : 3,
GlobalColorTableFlag : 1;
Byte BackgroundColorIndex;
Byte PixelAspectRatio;
} ScreenDescriptor;
typedef struct {
Byte Separator;
Word LeftPosition,
TopPosition;
Word Width,
Height;
Byte LocalColorTableSize : 3,
Reserved : 2,
SortFlag : 1,
InterlaceFlag : 1,
LocalColorTableFlag : 1;
} ImageDescriptor;
typedef struct {
Byte Separator;
Byte Label;
Byte BlockSize;
Byte Reserved : 3,
Disposal : 3,
UserInput : 1,
Transparent : 1;
Word DelayTime;
Byte TransparentColor;
Byte Terminator;
} ControlDescriptor;
class Picture
{
public:
Picture();
Picture(int,int,int,int); // width, height, #colors, #bits/color component
~Picture();
Picture(char*);
void PutPixel(int x,int y,int col)
{ if(y>=0 && y<(int)leny && x>=0 && x<(int)lenx && col<NumColors) pic[y][x]=col; };
void PrintCharUp(int,int,int,char c); // x,y,color,char
void PrintChar(int,int,int,char c); // x,y,color,char
void PrintString(int,int,int,char* s); // x,y,color,string
void PrintStringUp(int,int,int,char* s); // x,y,color,string
void Bar(int,int,int,int,int); // x1,y1,x2,y2,color
void Line(int,int,int,int,int); // x1,y1,x2,y2,color
void Circle(int,int,int,int); // x1,y1,r,color
void FilledCircle(int,int,int,int); // x1,y1,r,color
int GetPixel(int x,int y)
{ if(y>=0 && y<(int)leny && x>=0 && x<(int)lenx) return pic[y][x];
else return 0; };
void SetColor(int colornum, int red, int green, int blue);
void SetTransparent(int colornum)
{ TransparentColor=colornum; };
void SetFont(int); // fnt?????
SaveAsGIF(FILE* f);
private:
unsigned char** pic;
Word lenx,leny;
int usefont;
/* GIF Routines */
int BitsPrPrimColor, /* Bits pr primary color */
NumColors; /* Number of colors in color table */
Byte *ColorTable;
int TransparentColor;
Word RelPixX, RelPixY; /* Used by InputByte() -function */
FILE* OutFile;
Byte Buffer[256]; /* There must be one to much !!! */
int Index, /* Current byte in buffer */
BitsLeft; /* Bits left to fill in current byte. These
are right-justified */
Byte *StrChr;
Word *StrNxt,*StrHsh,NumStrings;
void InitGIF(int,int);
int AllocStrtab(void);
void FreeStrtab(void);
int WriteBits(int bits, int numbits);
Word FindCharString(Word index, Byte b);
Word AddCharString(Word index, Byte b);
void ClearStrtab(int codesize);
int ResetOutBitFile(void);
int Write(void *buf, unsigned len);
int WriteScreenDescriptor(ScreenDescriptor *sd);
int WriteControlDescriptor(ControlDescriptor *cd);
int WriteImageDescriptor(ImageDescriptor *id);
int WriteWord(Word w);
int WriteByte(Byte b);
int BitsNeeded(Word n);
int InputByte(void);
int LZWCompress(int codesize);
};
#endif