Member 13922884 Ответов: 2

Использование графики.h в кодовых блоках


Я только начал изучать графику. Начиная с графики.h не входит в состав codeblocks я внес необходимые изменения и сделал нижеприведенную программу. Но я получаю предупреждение: Устаревшее преобразование из Строковой константы в символ*

#include<stdio.h>
#include<graphics.h>
int main()
{
   int gd=0,gm;
   initgraph(&gd,&gm,"");
   circle(100,80,20);
   getch();
   closegraph();
}


Что я уже пробовал:

Я добавил графику.h и файл заголовка winbgim в папке include. Добавлен libbgi.a в папку lib. Добавлен путь к этому файлу библиотеки и "-lbgi-lgdi32-lcomdlg32-luuid-loleaut32 -lole32" в настройках компоновщика.

Пожалуйста, дайте мне знать, если я пропущу здесь какой-нибудь шаг.
Спасибо.

Richard MacCutchan

Вы не объяснили, где возникает это сообщение об ошибке, и я не вижу никаких ссылок на строки или символ* в образце кода.

Вам было бы лучше переключиться на Visual Studio и использовать более современную полностью поддерживаемую графику Windows GDI/GDI+.

Member 13922884

Мое извинение.Для функции initgraph () отображается сообщение об ошибке.

2 Ответов

Рейтинг:
0

Jochen Arndt

Проходить NULL вместо пустой строки. Причина, по которой вы получили это предупреждение (это предупреждение, а не ошибка), заключается в том, что вы передаете строковый литерал, который является const по определению но параметр функции не является const (char *).

Заметьте также, что initgraph() а остальные графические функции принадлежали древним компиляторам Turbo-C/C++ для MS-DOS. Используя их в настоящее время через WinBGIm это не лучший выбор для изучения графического программирования.


Member 13922884

Спасибо. Но это тоже не работает. Должен ли я снова внести все изменения?

Jochen Arndt

Пожалуйста, дайте определение термину "не работает".
Какие-нибудь ошибки компилятора или компоновщика?
Если во время выполнения ничего не происходит, добавьте проверки ошибок в свой код, проверяя значение gd и/или используя graphresult.

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

Member 13922884

То же предупреждение, что и раньше.

Jochen Arndt

Это предупреждение, а не ошибка. Если нет возможности рассматривать предупреждения как ошибки, следует создать исполняемый файл.

Однако этого не должно происходить при использовании
initgraph(&gd,&gm,NULL);

В зависимости от компилятора вы также должны получить еще одно предупреждение о том, что main() не возвращает значение.

Member 13922884

Сейчас он не дает предупреждения. Но я не получаю вывод и не получаю ошибку времени выполнения.
"Visual Studio Just-In-Time Debugger

Необработанное исключение win32 произошло в Test1.exe [3992].
Своевременная отладка этого исключения завершилась со следующей ошибкой:
Не установлен отладчик в режиме отладки. В Визуальном Плане
Инструменты/Параметры/Отладка/Точно В Срок.

Проверьте индекс документации на наличие "Just-in-time debugging, errors" для
подробная информация."

Jochen Arndt

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

Но опять же: этот графический интерфейс является древним и был принят проектом WinBGIm. Выполнение этого бега может потребовать некоторой дополнительной работы, которая далеко выходит за рамки начинающих.

Возможно, даже невозможно использовать его в последних версиях Windows из-за измененной оболочки. Обратите внимание, что даже проект WinBGIm датируется 2005 годом, а графический интерфейс берет свое начало с 1980-х годов.

Кстати: вы скопировали файлы драйвера в каталог вашего исполняемого файла?
Если нет, то initgraph() терпит неудачу, которую можно обнаружить, проверив успех с помощью переменных gm и gd и graphresult.

Member 13922884

Я не внес никаких изменений в программу, кроме добавления NULL в initgraph().
Я также добавил путь к папке include в опцию "поиск каталогов" в опции сборки проекта.

Я понимаю, что Винбгим довольно стар. Поскольку я новичок в программировании, я нашел это только в интернете, поэтому начал работать над этим.

Jochen Arndt

Таким образом, initgraph (), возможно, потерпел неудачу, и вы не проверили его в своем коде. В результате поведение вашего запущенного приложения не определено, что обычно приводит к сбою приложения или завершению работы с нарушением доступа, как в вашем случае.

Когда функции предоставляют какой-то статус / ошибку, проверьте это в своем коде!
Прочтите документацию по этой функции. Он объясняет, как проверить наличие ошибок и что означают различные коды ошибок. Это также объясняет, что вы должны поместить файлы драйверов в каталог исполняемой программы при передаче пустого или нулевого пути.

Но опять же: возможно, его даже невозможно использовать с последними версиями ОС.

Member 13922884

должен ли я скачать Dev c++. Есть ли какие-либо проблемы с этой IDE?

Jochen Arndt

Интегрированная среда разработки, не связанные каким-либо образом свои проблемы.

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

Вы читали документацию?
Вот оно: https://www.cs.colorado.edu/~main/bgi/doc/initgraph.html
Он содержит пример кода, который включает в себя проверку ошибок.

Member 13922884

Спасибо. Это был только библиотечный вопрос. Теперь все решено. Спасибо снова.

Рейтинг:
0

alkesh Miyani

Я последовал за ним https://erainnovator.com/how-to-include-graphics-h-in-codeblocks/ и я смог использовать графику.h в кодовых блоках. Я надеюсь, что это решит вашу проблему.