Witam,
#include <cstdlib>
#include <iostream>
#include <string>
#include <queue>
using namespace std;
class Huff{
public:
int ile; // licznik wystąpień
char co; // zmiena przecowywujaca znak
Huff* left; // lewy syn
Huff* right; // prawy syn
public:
Huff(){};
Huff(int i, char j){
this->ile = i;
this->co = j;
this->left = NULL;
this->right = NULL;
}
friend bool operator<(const Huff& x, const Huff& y) {
if(x.ile > y.ile)
return true;
else
return false;
}
Huff& operator=(Huff& y) {
this->co = y.co;
this->ile = y.ile;
this->left = y.left;
this->right = y.right;
return *this;
}
};
int main(){
// ----- * Zliczanie znaków w pliku text.txt * -----
int ASCII[128] = {0}; // Tablica używana przy zliczania znaków
FILE *plik;
char znak;
int pom;
plik = fopen("text.txt","r");
if(plik == NULL){
cout << "Brak pliku text.txt! \a" << endl << endl;
}else{
cout << "Wczytany tekst:" << endl;
while (!feof(plik)){
fscanf(plik,"%c",&znak);
printf("%c",znak);
pom = (int)znak;
ASCII[pom]+=1;
};
cout << endl << endl;
};
fclose(plik);
// ----- * Wypełnianie kolejki prioretytowej * -----
priority_queue<Huff> PQ; // Deklaracja kolejki
for(int i=0; i<128; i++){
if(ASCII[i]!=0) PQ.push(Huff(ASCII[i], (char)i));
};
// ----- * Budowa drzewa kodowego Huffmana * -----
Huff pomo, *Root;
while(!PQ.empty()){
pomo.left = PQ.top();
PQ.pop();
pomo.right = PQ.top();
PQ.pop();
pomo.ile = pomo.left.ile + pomo.right.ile;
PQ.push(pomo);
};
system("PAUSE");
return EXIT_SUCCESS;
} // main
Moje problemy zaczynają się przy budowie drzewa. Szczerze to już nie mam pomysłu o co chodzi. Wstawiłem taką wersję jaka mi się wydaje najbliżej poprawnej.
Oto błędy jakie mi produkuje:
In function `int main()':
73 cannot convert `const Huff' to `Huff*' in assignment
75 cannot convert `const Huff' to `Huff*' in assignment
77 `ile' has not been declared
77 request for member of non-aggregate type before '+' token
77 `ile' has not been declared
77 request for member of non-aggregate type before ';' token
Możecie mi wyjaśnić co tu jest nie tak? z góry dziękuję :)