Projekt, nielogiczny blad - pointer to incomplete type

0

Mam tu projekt dość duzy. Sory ze go wrzucam tutaj a nie na githuba ale skompresowałem do kilkunastu kB. Olejcie to co robi ten ten projekt. Popatrzcie sb na pierwszy błąd. Jest tam: "Pointer to incomplete type is not allowed", gdy chcę się odnieść do obiektu klasy os przez kropkę. Siedze już na tym godzinę. Nie mam pojęcia o co tam może chodzić. Byłbym naprawdę niezmiernie wdzięczny jakby komuś się udało ogarnąć o co tu chodzi z tym błędem.

0

Pokaż fragment kodu który generuje błąd.

1

Nie masz pełnej definicji klasy w miejscu jej użycia. Nie chce mi się kodu ściągać i przeglądać - wrzuć na githuba czy coś.

Je​śli masz klasę, która zawiera np. unique_ptr<T> to albo musisz w każdym TU z nią widzieć pełną definicję T, albo musisz zadeklarować w niej destruktor.

0

ProcEndServiceTimeEvent.h

#pragma once

class ProcEndServiceTimeEvent : public TimeEvent
{
public:
	ProcEndServiceTimeEvent(int occurence_time);
	void execute(OS os, priority_queue <TimeEvent *, vector <TimeEvent *>, CompareEvents> Agenda);
	~ProcEndServiceTimeEvent();
};

 

ProcEndServiceTimeEvent.cpp

#include "TimeEvent.h"
#include "ProcEndServiceTimeEvent.h"
#include "OS.h"
#include <queue>
#include <vector>
#include "Process.h"

ProcEndServiceTimeEvent::ProcEndServiceTimeEvent(int occurence_time) : TimeEvent(occurence_time) {}

void ProcEndServiceTimeEvent::execute(OS os, priority_queue <TimeEvent *, vector <TimeEvent *>, CompareEvents> Agenda)
{
	//musze dostac do procesu ktory jest w procesorze i zwolnic procesor
	Process *proc = os.proc->GetProcess(); //tu blad podkresla slowo os i wywala ten blad co podalem
	os.proc->ReleaseProcessor();
	//Jeżeli TPIO != 0: Umieść proces w odpowiedniej
	if (proc->TPIO != 0) //kolejce procesów oczekujących
		os.q_wait_proc[proc->randIO]->Add(proc);
	else
	{
		cout << "Usuwam podany proces z systemu: " << *proc << endl;
		delete proc;
	}
}

ProcEndServiceTimeEvent::~ProcEndServiceTimeEvent()
{
}
 

OS.h

class QueueProcWait;

class OS
{
public:
	OS(const int nio);

	std::vector <IODevice *> vec_io_device; //wektor urzadzen I/O
	Processor *proc; //procesor
	QueueProcReady *q_ready_proc; //kolejka procesow gotowych
	std::vector <QueueProcWait *> q_wait_proc;
	const int N_IO; //liczba urzadzen I/O

	~OS();
}; 

OS.cpp

#include "Processor.h"
#include "QueueProcReady.h"
#include "QueueProcWait.h"
#include "IODevice.h"
#include "OS.h"

OS::OS(const int nio) :N_IO(nio)
{
	for (int i = 0; i<N_IO; i++) //tworzymy urzadzenia i/O
		vec_io_device.push_back(new IODevice);

	proc = new Processor; //tworzymy procesor

						  //tworzymy kolejke procesow gotowych (do CPU)
	q_ready_proc = new QueueProcReady();

	//tworzymy tyle
	//kolejek procesow oczekujacych ile jest urzadzen I/O
	for (int i = 0; i < N_IO; i++)
		q_wait_proc.push_back(new QueueProcWait());
}

OS::~OS()
{
}
 
2

Nie dołączasz nagłówka Processor.h

0

Dzięki. Zniknął ten błąd. Zostały inne. Może uda mi się z nimi poradzić.

0

Simulator.h

#pragma once
#include <queue>
#include <vector>

class TimeEvent;
class CompareEvents;

class Simulator
{
public:
	Simulator();
	int global_time;
	std::priority_queue <TimeEvent *, std::vector <TimeEvent *>, CompareEvents> Agenda;
	~Simulator();
};
 

Simulator.cpp

#include "Simulator.h"

Simulator::Simulator()
{
}


Simulator::~Simulator()
{
}

CompareEvents.h

 #pragma once

class CompareEvents
{
	CompareEvents();
	bool operator()(const TimeEvent *te1, const TimeEvent *te2);
	~CompareEvents();
};

CompareEvents.cpp

 CompareEvents::CompareEvents()
{
}

bool CompareEvents::operator()(const TimeEvent * te1, const TimeEvent * te2)
{
	//kolejność - rosnąco
	if (te1->occ_time > te2->occ_time) return true;
	return false;
}

CompareEvents::~CompareEvents()
{
}

TimeEvent.h

 #pragma once
#include <queue>
using namespace std;

class OS;
class CompareEvents;

class TimeEvent
{
public:
	int occ_time;
	virtual void execute(OS os, priority_queue <TimeEvent *, vector <TimeEvent *>, CompareEvents> Agenda) = 0;
	TimeEvent(int occurence_time);
};

TimeEvent.cpp

#include "TimeEvent.h"

TimeEvent::TimeEvent
(int occurence_time) : occ_time(occurence_time) {} 

Został mi ostatni błąd. Otóż wszystko działa jak zakomentuje wszystkie linijki w ktorych jest kolejka priorytetowa, a jezeli ich nie zakomentuje to wywala blad:
Error C2139 'CompareEvents': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_nothrow_constructible' Symulacja_zadanie2 c:\program files (x86)\microsoft visual studio 14.0\vc\include\type_traits 701

Przy czym jak klikne 2x w ten blad to mnie wywala do jakiegos pliku spoza projektu.

2

Wszędzie gdzie wołasz TimeEvent::execute musisz widzieć definicję CompareEvents

1 użytkowników online, w tym zalogowanych: 0, gości: 1