Как я полагаю, вы знаете, что "Ядро" - это абстрактный класс , в силу того, что он имеет чисто виртуальную функцию : virtual void procesare(std::string aplicatie) = 0;
.
Полагаю, вы также знаете, что не можете создать экземпляр абстрактного класса: отсюда ваша ошибка.
Вопрос:
Почему компилятор считает, что вы пытаетесь создать экземпляр экземпляра«Ядро»?
Вы?
Это выглядит , как будто вы пытаетесь создать четыре объекта CoreScreen: CoreScreen CS1, CS2, CS3, CS4;
.Если это так, то все должно быть в порядке.
Вы правы: procesare()
является виртуальным («чисто виртуальный», как это бывает).Вы действительно переопределили его правильно в CoreScreen.cpp: он НЕ выглядит так, как будто это проблема.
В: Вы когда-нибудь реализовывали Core::Core()
и Core::~Core()
где-нибудь?Если нет, как вы вообще скомпилировали?
Q: Вы SURE не пытаетесь создать экземпляр "Core" где-нибудь (даже "случайно")?
Сколько бы это ни стоило, следующий MCVE компилируется и работает нормально (Ubuntu 18, GCC 7.3.0):
TestCore.h:
/*
* TestCore.h
*/
#ifndef TESTCORE_H_
#define TESTCORE_H_
#include <string>
class Core
{
protected:
static unsigned int id_seed;
unsigned int id;
std::string status;
public:
friend class CPU;
Core();
~Core();
virtual void procesare(std::string aplicatie) = 0;
};
class CoreScreen: public Core
{
public:
CoreScreen();
~CoreScreen();
void procesare(std::string aplicatie);
};
#endif /* TESTCORE_H_ */
TestCore.cpp:
/*
* TestCore.cpp
*/
#include <iostream>
#include <fstream>
#include "TestCore.h"
Core::Core()
{
std::cout << "Core::Core()..." << std::endl;
}
Core::~Core()
{
std::cout << "Core::~Core()..." << std::endl;
}
CoreScreen::CoreScreen()
{
std::cout << "CoreScreen::CoreScreen()..." << std::endl;
}
CoreScreen::~CoreScreen()
{
std::cout << "CoreScreen::~CoreScreen()..." << std::endl;
}
void CoreScreen::procesare(std::string aplicatie)
{
std::cout << "CoreScreen::procesare(" << aplicatie << ")" << std::endl;;
}
int main () {
std::cout << ">>main()..." << std::endl;
CoreScreen CS1, CS2, CS3, CS4;
CS1.procesare("Testing CS1");
std::cout << "<<main()." << std::endl;
return 0;
}
ВЫБОР ОБРАЗЦА:
>>main()...
Core::Core()...
CoreScreen::CoreScreen()...
Core::Core()...
CoreScreen::CoreScreen()...
Core::Core()...
CoreScreen::CoreScreen()...
Core::Core()...
CoreScreen::CoreScreen()...
CoreScreen::procesare(Testing CS1)
<<main().
Вы заметите, что я реализовал Core :: Core () и Core :: ~ Core ().Если они вам не нужны - тогда даже не помещайте их в определение своего .h класса.
'Надеюсь, это поможет