Loading...
BobyTopalova avatar BobyTopalova 26 Точки

демо за CodeOrganisation & C++ Templates

Имам, следния въпрос когато се опитам да Build and Run демо №5 от лекцията получавам следната грешка 'undefined reference to WinMain@16'. Понеже имах проблем с IDE-то, се чудя дали проблема е при мен.

Ето и файловете:

1) Company.cpp;

2) Company.h;

3) HeaderAndSourceFilesMain.cpp

Може ли някой да ми каже при мен ли е проблема?

Тагове:
0
C++ Advanced
j.petrov_90 avatar j.petrov_90 373 Точки
Best Answer

Привет, @bobyTopalova,

Проблемът е във твоя телевизор, да.

От сега ти казвам, че това е проблем с IDE-то ти. Не, това не значи, че трябва да го пренсталираш.
Един съвет, само - аз ще помогна с каквото мога, но свиквай да търсиш информация сама в интернет, защото повярвай ми - ще ти трябва постоянно (поне в този бранш е така).
Не бързай да се хвърляш на Visual Studio (не, ме имам нещо против него де, мега доброто IDE си е), но мисълта ми е опитай да решиш проблема на твоето IDE. Иначе ще го смениш на VS и ... там пак ще имаш проблеми от този род :)

Какво направих аз:
Копирах грешката, която ти си дала 1:1 в Google, отворих първите 2 резултата и прочетох по 3 коментара.

Там намерих това:
It looks like you accidentally made a windows application project, rather than a console project. This is why it is looking for the windows entry point 'WinMain', rather than the console entry point 'main'.

I suggest you create a new project, being careful to select "Console Application", and then copy the source code over from the old project to the new one.

Друго нещо, което ще апелирам да внимаваш:
Когато добавяш нови файлове в твоята програма - прави го през IDE-то. Copy-paste на файла, но в самия графичен интерфейс на IDE-от или Import file.
Защо да правим това? Защото иначе, ако отидеш и добавиш тези файлове на ръка през file explorer-а, твоето IDE няма начин да знае, че там има нови файлове и няма да ги отрази в своя makefile (т.е. няма да може да ги билдва).

Относно коментара ти по-надолу в темата:
1) Нигока не include-вай .cpp файлове! Никога!
Защо? Защото cpp файловете нямат header guard-ове и защото, ако include-неш cpp файл има голяма вероятност да нарушиш "the one definition rule" (https://en.wikipedia.org/wiki/One_Definition_Rule)

2) Можем да разделяме файловете както си искаме (обикновенно всички файлове в които пишеш някакви класове или само функции се разделят на header(.h) и на compilation unit(.cpp) )

3) Ние не build-ваме main() функцията, а build-ваме всички compilation unit-и (или просто казано всички .cpp файлове), които сме посочили да са част от нашия проект.
Какво е по специално на main() функцията?
Когато говорим за build-ване - нищо не е по-различно от коя и да е друга функция. Изискването е да е част от поне 1 cpp файл (най-често се кръщата main.cpp за да не го търсим като луди 2 часа).
Ако не гледаме build-ването - main() функцията е по-различна от всички останали функции с това, че се изисква от програмата ти задължително да има такава.
Като пуснеш твоята програма ти е гарантирано, че това ще е твоята входна точка (първото нещо, което ще се извика). (Тук само има малка добавка - преди да се извика main() функцията първо се създават всичси глобални обекти в програмата, ако имаш такива).

Поздрави

2
20/02/2019 17:01:08
BobyTopalova avatar BobyTopalova 26 Точки

Благодаря, за изчерпателният отговор! И аз търся в интернет, но във форума ми отговарят, много умни и опитни хора, а и малко се стреснах и първото, за което се сетих беше за форума.

0
22/02/2019 17:20:12
j.petrov_90 avatar j.petrov_90 373 Точки

Естествено, че ще пишеш във форума :)
Той е за това и аз постоянно ви апелирам да го използвате.
Така и ти ще разбереш къде ти е била грешката и така някой друг колега, който има такъв или подобен проблем също ще му бъде полезно.

Жива и здрава
 

1
BobyTopalova avatar BobyTopalova 26 Точки

Пиша, за да кажа как аз се справих с грешката 'undefined reference to WinMain@16'.  Може да е полезно и за друг, който работи с Code::Blocks, за инфо вижте този линк.

http://wiki.codeblocks.org/index.php/Creating_a_new_project 

Понеже до сега, за да напишем нова програма, правим следното File->New->EmptyFile и го записваме с "име".cpp и готово, пишем и компилираме без проблем, дори може и да си влючим хедър File->New->File...->C/C++ header и пак без да е включен в проект, всичко се компилира и работи без проблем. Но когато програмата е разделена на няколко хедъра(*.h) и няколко compilation unit-и (т.е. *.cpp), без те да са влкючени в проект Code::Blocks ги мисли за отделни програми. Сега е необходимо да се създаде един празен проект File->New->Project->Console application и т.н, вижте линка за подробна информация и така вече комилатора знае, че тези файлове се компилират заедно и прави т.нар. MakeFile, както е обяснено в презентацията.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.