Loading...
Jovanna avatar Jovanna 186 Точки

Compile time error в Judge от Visual Studio

Здравейте,

този проблем се появи още предното издание на C++ Fundamentals, там работихме с Code::Blocks (лекции и домашни).  Но, при тип домашни: изпращане на zip-файл, системата даваше "Compile time error"  ако кода е писан на Visual Studio, защото то вкарваше някави неща в кода. Сега се появи същия проблем при мен , на 3-та и 4-та задача от домашното, иначе ми работят с дадените тестове.

Инклуднала съм някои библиотеки, <string>, <sstream>, но си има препроцесорните директиви, какво да правя?

Благодаря.

 

 

Тагове:
0
C++ Programming
Jovanna avatar Jovanna 186 Точки

Да, явно това е проблема, защото прехвърлих целия проект в Code::Blocks и компилирах,   Judge ми прие zip-a без "Compile time error".

Остава да разберем как от VS да го приема също? Някави идеи?

0
marsp avatar marsp 19 Точки

Здравей!

Това което мога да ти предложа е, при създаването на нов проект в VS, да избираш "Empty Project", точно за да не ти се пълнят излишни директиви. Оттам насетне, просто вдясно на "Source Files" и "Header Files" да дадеш десен бутон > "Add" > "New Item" и там вече избираш .cpp или .h, в зависимост какво ти трябва.

Това което може да направиш е просто да отвориш да речем "main.cpp" файла на задачата, Ctrl+A да маркираш целия код, копираш го, отиваш в твоя "main.cpp", пак Ctrl+A, ако има някакви "изплюти" неща все пак, и пействаш.

Когато вече кодът ти върви и искаш да пуснеш на Judge, само трябва да намериш Project folder-а ти, който по принцип by default, VS слага на Windows под "Documents" > "Visual Studio (version here)" > "Projects". Вече в папката на проекта, който искаш да пуснеш имаш вътре още една папка, която обикновенно е именувана по същият начин, по който тази, която си отворила токущо, би трябвало да се пада над solution (.sln) файла ти. Там вече са .cpp и .h файловете, и там вече трябва да архивираш нужният ти файл за Judge. 

Би трябвало по този начин да нямаш такава грешка. Възможно е и да бъркам и да не е бил това проблемът, аз лично така си създавам проектите и файловете в VS и до сега не съм имал проблеми с Judge. Надявам се да съм ти помогнал. :)

Поздрави!

1
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Да, и аз бих препоръчал същото, изглежда че Visual Studio заедно с тези неща, които добавя, вкарва и някакви лоши символи във файла, които повечето нормални компилатори се задавят на тях. Empty project го няма този проблем, защото там файловете ги създаваш ти, не Visual Studio.

Само едно допълнение - десен бутон на проекта->open folder in file explorer отваря папката на проекта където са .h и .cpp файловете, няма нужда да го търсиш на ръка

2
marsp avatar marsp 19 Точки

Включвам допълнение покрай интересен казус, който ми се случи. :) На последната задача от Judge Assignment 2 получих и аз въпросният compile time error. Бях сигурен, че кодът ми е правилен, тъй като се постарах да дебъгна хубаво преди да пусна файла. Първоначално си помислих да не е, защото пейстнах на Жоро "hint"- а, и това да е бил негов скрит номер и "hint"-а всъщност да е дяволски bait (съдържащ някакви формати, които да се ебават с компилатора) за мързели като мен хахаха! Уви, преписах този откъс на ръка, не беше това проблема. (Сори Жоро, пак щеше да е яко де! :D) Реших да тествам на Code Blocks, както беше предложила в този пост - оказа се, че компилатора на Code Blocks не харесва ей това:

byte* serializeToMemory(std::string &input, size_t &bytesWritten)

промених го на:

byte* serializeToMemory(std::string input, size_t &bytesWritten)

и Judge системата го прие без грешката. Явно Judge поддържа Code Blocks-кия компилатор или нещо такова.

Реших да споделя наблюдения. Ако някой знае повече, нека сподели. :)

Поздрави!

1
13/09/2018 05:31:42
MartinBG avatar MartinBG 4803 Точки

Най-вероятно е бил другаде проблемът, защото следната сигнатура е валидна и мина при мен:

byte* serializeToMemory(const std::string& input, size_t& bytesWritten)

 

1
13/09/2018 10:12:46
marsp avatar marsp 19 Точки

Ха, интересно! Сега тествах да видя пак, с "const" стана, ама след това пробвах и без, отново през VS, и двата пъти ги прие. Кой знае каква тъпотия е станала, дето се е оправила сама след рестартиране на компа/VS.. Нищо де поне хора с подобен проблем да могат да видят потенциални "решения" на този проблем. 

1
Jovanna avatar Jovanna 186 Точки

Ето още една разлика между компилаторите:

При 

    std::sort(firstCompanyPtr, lastCompanyPtr, [&](auto p1, auto p2 ) -> bool
    {
заради "auto" ,  Judge дава Compile time error  , интересно, нали е с компилатора на Code::Blocks, някоя от версиите,

В Code::Blocks и във Visual Studio минава и с auto.

замествам с Company* - минава и в Judge.

Поздрави!

0
27/09/2018 19:02:39
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

Това най-вероятно е разлика във версиите на C++ стандарта -  auto параметри на функции и ламбди бяха добавени в C++14, а версията на Judge компилатора е C++11 ако не се лъжа. По всяка вероятност имаш включен C++14 стандарта в Code::Blocks, затова ти се компилира успешно.

Поздрави,

Жоро

1
kolioi avatar kolioi 641 Точки

А, това ли било. Аз използвах string literals (operator""s) в няколко задачи и се чудя защо не ще да се компилира в джадж.

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