Task 4 Word C++ OOP Inheritance and Polymorphism
Колеги здравейте!
Дори незнам дали съм на прав път, но бих бил много благодарен ако някой ме подритне малко, че тотално забих...
Ето го кода ми засега: https://pastebin.com/FPsm5uWP
Незнам "buildCommandInterface" да го направя като метод или по друг начин и точно как не мога да се сетя нещо?
Привет, колега,
Радвам се, че приемаш курса толкова присърце. Давай го по-спокойно :)
Преди да ти отговоря, бих желал да ти отправя една градивна критика:
Моля те, опитвай се да задаваш конкретен въпрос.
Например:
- Не мога да подкарам еди си кой test case;
- Програмата ми не се build-ва с еди си каква компилационна грешка;
- Еди си кой ред от кода не го разбирам и т.н.
Така както си задал въпроса - доста обезкуражаващо действа на хората, които искат да ти помогнат...
Защото трябва да прегледат цялата задача, да я осмислят, да разгледат цялото твое решение, да за го осмислят и чак тогава да се опитат да ти помогнат.
Разбираш ме за какво говоря, нали? :)
Сега към решението ти:
1) Не съм ти тествал цялото решение, но съм 100% убеден, че имаш "фатална" грешка на редове 53 и 55 от второто решение, което си дал.
virtual std::vector<Command> initCommands() override {
std::vector<Command> commands; //ред 53
CommandInterface::initCommands(); //ред 55
commands.push_back(Command("cut", std::make_shared<CutInterface>()));
commands.push_back(Command("paste", std::make_shared<PasteInterface>()));
return commands;
}
Би трябвало да е std::vector<Command> commands = CommandInterface::initCommands();
защото иначе създаваш празен вектор и след това викаш функция, чиито резултат не го записваш никъде...
Пробвай това и пак ще си говорим.
П.П. много те моля, разделяй се отделните класове на отделни файлове!
Отдавна мина времето, когато можеше всичко да се събере в един файл.
А и както си говорихме по-горе - като кода ти е на едно място - става нечетим, респективно хората, които го гледат и искат да ти помогнат главоломно намаляват като бройка.
Поздрави
Здравей колега. Извинявам се за това, но най-вероятно понеже съм се напрегнал и съм го задал по този начин въпроса.
Поправих това за което ми каза, но като цяло проблеми ми е във std::shared_ptr<CommandInterface> interface = buildCommandInterface(text); (което е в мейна) незнам как да го направя във Initialization.h...Там му подавам клас ExtendCommandInterface който наследява CommandInterface обаче ми дава няколко грешки едната от които е:
Error C2512 'std::shared_ptr': no appropriate default constructor available ...
Колега, моля те - другия път като имаш компилационна грешка - напиши го в самия пост.
Ти тотално ни пусна по тъча да ти търсим проблем в решението на задачата като на теб даже компилацията не ти минава...
Томно това имах предвид със: задай конкретен въпрос.
Когато бориш грешки от компилатора - помни: винаги, винаги, винаги, започвай да оправяш най-горната грешка.
Защо? Защото тя може лавинообразно да е създала други грешки, които принципно биха изчезнали след като оправиш именно тази първа грешка.
Какво направих аз - заредих ти кода, който си предоставил и опитах да build-на.
Builda fail-на като първата грешка, която ми дава е:
Initialization.h:7:21: error: ‘ExtendCommandInterface’ was not declared in this scope
Т.е. компилаторът няма знания какво е ExtendCommandInterface във твоята функция
std::shared_ptr<CommandInterface> buildCommandInterface(std::string& text)
Трябва просто да преместиш тази функция под кода на класа ти за да може тази функция да има знанието какво е това животно ExtendCommandInterface.
Надявам се ме разбра какво ти казвам.
Давам ти лесен пример какво си нарравил в твоята програма:
int main() {
int b = a + 5;
int a = 4;
return 0;
}
Тук копмилацията ще fail-не и ще ти каже, че b = a + 5 не може да се изпълни, защотото на този ред компилатора не знае какво е това "a". За до го оправиш просто трябва да размениш 2та реда с променливите "a" и "b".
Същото нещо си направил и ти :)
Като подкарах това задачата ми даде 20/100, но предполагам имаш още логика да дописваш.
Нея ще трябва сам да си я пребориш :)
По-здрави