как создавать модули а имено *.h и *.c *.cpp файлы. В *.h я обявляю прототипы функций а в *.c их тело и когда пишу в main.c #include <*.h> оно его не находит хотя файлы находятся в одной директории ето я лечю так #include <D:\...\...\*h> после этого при build'e выдает много ошибок. Обьясните пожалуста как надоделать.
Здравствуйте, Denton, Вы писали:
D>как создавать модули а имено *.h и *.c *.cpp файлы. В *.h я обявляю прототипы функций а в *.c их тело и когда пишу в main.c #include <*.h> оно его не находит хотя файлы находятся в одной директории ето я лечю так #include <D:\...\...\*h> после этого при build'e выдает много ошибок. Обьясните пожалуста как надоделать.
Правила простые:
<...> — означает стандартные заголовочные файлы (они могут и не существовать в виде файлов)
"..." — заголовочные файлы проекта или твоих собственных библиотек.
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Правила простые:
АШ><...>> — означает стандартные заголовочные файлы (они могут и не существовать в виде файлов) АШ>"..." — заголовочные файлы проекта или твоих собственных библиотек. АШ>То есть, не АШ>
АШ>#include <myheader.h>
АШ>
АШ>а АШ>
АШ>#include"myheader.h"
АШ>
теперь все компилируеся но при build'e выдоет ошибки :
winsys.obj : error LNK2005: "int height" (?height@@3HA) already defined in main.obj
winsys.obj : error LNK2005: "int width" (?width@@3HA) already defined in main.obj
winsys.obj : error LNK2005: "bool fullscreen" (?fullscreen@@3_NA) already defined in main.obj
winsys.obj : error LNK2005: "bool ShowFPS" (?ShowFPS@@3_NA) already defined in main.obj
winsys.obj : error LNK2005: "struct HWND__ * h_Wnd" (?h_Wnd@@3PAUHWND__@@A) already defined in main.obj
winsys.obj : error LNK2005: "struct HDC__ * h_DC" (?h_DC@@3PAUHDC__@@A) already defined in main.obj
Здравствуйте, Denton, Вы писали:
D>Здравствуйте, Анатолий Широков, Вы писали:
АШ>>Правила простые:
АШ>><...>> — означает стандартные заголовочные файлы (они могут и не существовать в виде файлов) АШ>>"..." — заголовочные файлы проекта или твоих собственных библиотек. АШ>>То есть, не АШ>>
АШ>>#include <myheader.h>
АШ>>
АШ>>а АШ>>
АШ>>#include"myheader.h"
АШ>>
D>теперь все компилируеся но при build'e выдоет ошибки : D>winsys.obj : error LNK2005: "int height" (?height@@3HA) already defined in main.obj D>winsys.obj : error LNK2005: "int width" (?width@@3HA) already defined in main.obj D>winsys.obj : error LNK2005: "bool fullscreen" (?fullscreen@@3_NA) already defined in main.obj D>winsys.obj : error LNK2005: "bool ShowFPS" (?ShowFPS@@3_NA) already defined in main.obj D>winsys.obj : error LNK2005: "struct HWND__ * h_Wnd" (?h_Wnd@@3PAUHWND__@@A) already defined in main.obj D>winsys.obj : error LNK2005: "struct HDC__ * h_DC" (?h_DC@@3PAUHDC__@@A) already defined in main.obj
Эта тем уже измочалена вдоль и поперек. Еще раз
Нельзя помещать определения объектов и неинлайновых функций в заголовочные файлы
В заголовочные файлы обычно помещают объявления, но не определения. Сделай поиск по форуму на тему объявлений, определений и заголовочных файлов. Или поищи просто 'LNK2005'.
В заголовочных файлах нельзя (т.е. не рекомендуется) объявлять переменные и реализацию функций. И настойчиво рекомендуется обрамлять их макросами #ifndef :
S> В заголовочных файлах нельзя (т.е. не рекомендуется) объявлять переменные и реализацию функций. И настойчиво рекомендуется обрамлять их макросами #ifndef :
Здравствуйте, Vano, Вы писали:
V>Здравствуйте, sercher, Вы писали:
S>> В заголовочных файлах нельзя (т.е. не рекомендуется) объявлять переменные и реализацию функций. И настойчиво рекомендуется обрамлять их макросами #ifndef :
V>А можно в начале файла main.h написать5: V>#pragma once
АТ>Эта тем уже измочалена вдоль и поперек. Еще раз
АТ>Нельзя помещать определения объектов и неинлайновых функций в заголовочные файлы
но если очень хочется и используеш Visual C++
то можно, главное не забыть добавить __declspec(selectany) (это из разряда Microsoft Specific bad practice)
АТ>В заголовочные файлы обычно помещают объявления, но не определения. Сделай поиск по форуму на тему объявлений, определений и заголовочных файлов. Или поищи просто 'LNK2005'.
а еше лучше не читать форумы и MSDN, а по хорошей книжке разобраться чем "обьявление" отличается от "определения"