Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

ValentinT avatar ValentinT 4 Точки

C++ advanced Task 3 - Orderedinserter

Здравейте! Имам  2 въпроса относно задача 3, единият от които е елементарен, а именно: как да подам вектор в конструктора на обекта от класа? Другият ми въпрос е относно грешки, които ми се появяват в main() файла на 3-та задача

 

Error    4    error C2065: 'companies' : undeclared identifier  

Error    7    error C2065: 'companyPtr' : undeclared identifier   

Error    8    error C2065: 'companyPtr' : undeclared identifier 

Error    2    error C2143: syntax error : missing ';' before '}'     - тук се подава вектор към новоконструирания обект

Error    3    error C2228: left of '.insert' must have class/struct/union  

Error    9    error C2541: 'delete' : cannot delete objects that are not pointers  

Error    1    error C2601: 'inserter' : local function definitions are illegal   

Error    5    error C3312: no callable 'begin' function found for type ''unknown-type''  

Error    6    error C3312: no callable 'end' function found for type ''unknown-type''  

    10    IntelliSense: expected a ';'    

    11    IntelliSense: initial value of reference to non-const must be an lvalue 

-Това са всички error - и , които ми излизат при билдване на проекта за тази задача и всичките са свързани единствено с OrderMain.cpp

 

Ще съм благодарен ако можете да ме опътите по някакъв начин. Нов съм света на C++, но се опитвам максимално бързо да навържа нещата.










 

Тагове:
0
C++ Programming 10/09/2018 14:33:39
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

В решението, което аз виждам качено, имаш няколко проблема с OrderedInserter класа, които предизвикват грешки в останалите файлове: (ако не виждам последната версия, най-добре качи кода на OrderedInserter.h в един pastebin и дай линк)

- нямаш ; (точка и запетая) след затварящата скоба на класа, това обърква компилатора за следващите редове

- декларираш функция insert в класа, обаче там тя е празна, и после правиш глобална функция insert, която няма общо с тази в класа. Просто сложи тази insert функция с кода ѝ вътре в класа, там където си написал insert фунцкията дето няма код с нея. Или може би искаш да разделиш имплементация и декларация (това ще го учим в лекция 5)? Ако да, онази insert функция извън класа трябва не да е void insert(const Company* c), а да е void OrderedInserter::insert(const Company* c)

- оттам нататък имаш разни грешки в самия код на функцията (примерно при *companies не ти трябва *, companies не е указател, нещата в него са, ама самото companies си е нормален обект), но там вече трябва ти да ги коригираш.

Като цяло решението ти изглежда по-сложно, отколко има нужда да е. Просто потърси с един цикъл къде е мястото на компанията, която ще вкарваш (търсиш такъв индекс, на какъвто ако вмъкнеш компанията, подредбата да е вярна), и ползвай insert функцията на vector класа за да я вмъкнеш на правилната позиция. Бих я почнал наново тази задача с тези промени, и сигурно ще ти отнеме не повече от час да я направиш.

Поздрави,

Жоро

1
ValentinT avatar ValentinT 4 Точки

insert фунцкията, коят съм декларирал извън класа наистина съм изпуснал scope оператора след поредното написване на функцията. Благодаря за отговора, ще се опитам да коригирам до курса, ако не, ще те попитам на място. Иначе това е кодът на функцията : https://pastebin.com/rLcW4tci и когато не използвам companies с * ми изписва че companies трябва да е от Pointer тип, най вероятно това идва от декларацията ми на вектор в самия клас, но понеже нямам представа как да отразя извикването на конструктора на обект с вектор.

Поздрави,

Валентин

0
10/09/2018 17:01:52
Jovanna avatar Jovanna 186 Точки

Здравей,

конструктора го викаш само веднъж, при създаването на обекта, което е тези два реда от main():

vector<const Company*> companies;  OrderedInserter inserter{ companies };

Иначе, в класа който трябва да напишеш, задаваш поле - вектор const пойнтери към компаниите, но по референция. Посе конструктора е с инициализиращ списък, в който е същия този вектор, по същия начин записан.

Успех!

 

 

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