Siema. Piszę pewien program, chciałbym do funkcji cmax przekazywac jako argument kolejkę priorytetową pq. Kolejka ta składa się z struktur typu Task. Niestety (albo na szczęście) kompilator wywala mi " error C2558: struct 'Task' : no copy constructor available or copy constructor is declared 'explicit' ". Pytanie co zrobić aby móc przekazać taką kolejkę do funkcji.
Moja struktura:
struct Task
{
//jakas tab lub wektor
int nr; //numer zadania
vector < int > czasy;
Task(){} //konstruktor domyslny
Task(int nrr, vector < int > czasyy):nr(nrr),czasy(czasyy){} //konstruktor param
Task (Task & wzor) //konstruktor kopiujacy
{
this->nr = wzor.nr;
this->czasy = wzor.czasy;
}
};
Funkcja cmax do której chcę przekazać kolejkę priorytetową:
int cmax(priority_queue<Task, vector<Task>,compare1> kolejka){
priority_queue<Task, vector<Task>,compare1> pom_k;
priority_queue<Task, vector<Task>,compare1> trolo;
int **tab=NULL;
//pobranie wymiarów (m i s)
int s=kolejka.size(); //wyzłuskanie s
int m=0; //wyłuskanie m
new Task;
Task ccc;
ccc = kolejka.top();
kolejka.pop();
m = ccc.czasy.size();
//kopiowanie kolejki żeby nie zmieniać tej wejściowej (do trolo z kolejki)
while (!kolejka.empty())
{
new Task;
Task aa = kolejka.top();
kolejka.pop(); //ta kolejka wejsciowa robi sie pusta
trolo.push( Task(aa) ); //kolejka wyjściowa
pom_k.push( Task(aa) ); //kolejka pomocnicza
}
//odtworzenie kolejki pq
while (!pom_k.empty())
{
new Task;
Task bb = pom_k.top();
pom_k.pop(); //ta kolejka pomocnicza robi się pusta
kolejka.push( Task(bb) ); //kolejka odtworzona 'kolejka
}
//tworze tablice o wymiarze s na m (czyli wymiar wczytanej kolejki)
tab = new int*[s];
for(int x = 0; x < s; x++) {
tab[x] = new int[m];
}
//przepisanie trolo do tablicy 'tab'..trolo jest puste i nie potrzebne
for(int i=0;i<s;i++){ //do tab przepisuje tyle tasków ile wynosi s
new Task;
Task po;
po = trolo.top();
trolo.pop();
for(int j=0;j<m;j++){
tab[i][j]=po.czasy[j]; //każdy czas przepisuje
}
}
//obliczas cmaxa..zwraca liczbę int 'cm' która jest cmaxem dla danej kolejki
for(int w=0;w<s;w++){
for(int z=0;z<m;z++){
if(w==0){
if(z==0){
tab[0][z]=tab[0][z];
}else{
tab[0][z]=tab[0][z-1]+tab[0][z];
}
}else{
if(z==0){
tab[w][z]=tab[w-1][z]+tab[w][z];
}else{
if(tab[w-1][z]<tab[w][z-1]){
tab[w][z]=tab[w][z-1]+tab[w][z];
}else{
tab[w][z]=tab[w][z]+tab[w-1][z];
}
}
}
}
}
int cm = tab[s-1][m-1];
return cm;
};
no i funkcja main:
int main(){
int size, ile_m; //ile zadan, ile maszyn
int **t = NULL; //tablica na wszystko potrzebna do funkcji cmax
int **tc = NULL; //tablica na cząstkowe uszeregowania
int c=0; //w to wpisuje cmaxa zwroconego przez c max
vector < int > tajmy; //poszczególne czasy
int tajm;
priority_queue<Task, vector<Task>,compare1> pq; //kolejka na taski(posegregowane)_wejsciowa
/*wczytywanie z pliku, taski będą na kolejce prio. pq*/
ifstream in;
in.open(IN);
if(in.good())
{
in >> size; //wczytaj rozmiar
in >> ile_m; //wczytaj ilosc kolumn
for(int i=0;i<size;i++){
tajmy.clear();
for(int j=0;j<ile_m;j++){
in >> tajm;
tajmy.push_back(tajm);
}
pq.push( Task(i+1, tajmy) );
}
in.close();
}else cout <<"Blond odczytu w calosci. koncze wasc panie, co by nie wstydzic nadzbyt"<<endl;
c=cmax(pq); //TU CHCĘ PRZEKAZAĆ KOLEJKĘ PQ
}
Proszę o pomoc\ :)