• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Brak deklaracji funkcji

VPS Starter Arubacloud
0 głosów
173 wizyt
pytanie zadane 20 kwietnia 2019 w C i C++ przez BezBarwny Użytkownik (700 p.)
unsigned char WriteCompressedFile(char *inputFilename, char *outputFilename, HuffmanCodeItem *huffmanCodeArray, int codeTableItems){
    //rozmiar bufora danych przygotowanych do budowy z nich bajtów
    const int writeBufferSize = 32;
    //rozmiar bufora wejsciowego, do którego będą wczytywane bajty pliku wejściowego
    const int inputBufferSize = 1024;
    //tablica do przechowywania ciągu wartości dziesiętnych "1" i "0", które będą potem zamienione na 1 bajt
    unsigned char byteToWrite[8];
    //bufor danych przygotowanych do budowy z nich bajtów
    unsigned char writeBuffer[writeBufferSize];
    //liczba elementów w buforze danych writeBuffer
    int writeBufferOffset = 0; 
    //bufor wejsciowy, do którego będą wczytywane bajty pliku wejściowego
    unsigned char inputBuffer[inputBufferSize];
    //licznik bajtów odczytanych z pliku wejściowego
    int bytesRead;
    FILE *inputFileHandle = fopen(inputFilename,"rb");  //otworz plik wejsciowy do odczytu binarnego
    while(bytesRead = fread(inputBuffer,sizeof(unsigned char),inputBufferSize,inputFileHandle)){
        for(int i=0; i<bytesRead; i++){
            //pozyskaj wskaźnik na odpowiedni element w tablicy kodowej na podstawie wartości symbolu 
            HuffmanCodeItem *code = (HuffmanCodeItem*) GetCodeItemBySymbol(inputBuffer[i],huffmanCodeArray,codeTableItems);
            //dla wszystkich elementów słowa kodowego:
            for(int j=code->wordLength-1; j >= 0; j-- ){
                //do bufora zapisu dopisz kolejną wartość 0 lub 1 ze słowa kodowego
                writeBuffer[writeBufferOffset] = code->codeWord[j];  
                //w buforze przybył jeden element, zwiększamy wskazanie liczby el.             
                writeBufferOffset++;
                //jeśli w buforze zapisu uzbieraliśmy 8 lub więcej elementów,
                //to możemy z nich utworzyć jeden bajt
                if(writeBufferOffset >= 8) {
                    //kopiujemy 8 początkowych elementów z bufora zapisu do tablicy przechowującej
                    //reprezentację bajtu do zapisu - byteToWrite
                    memcpy(byteToWrite,writeBuffer, 8);
                    //przekazujemy nasz bajt do funkcji konwertującej tablicę wartości dziesiętnych "0" i "1"
                    //do postaci bajtu zbudowanego z 8 bitów i zapisującej taki bajt w  pliku wyjściowym
                    WriteBitBufferToFile(outputFilename,byteToWrite,8);
                    //od indeksu 8 do konca przenosimy dane na poczatek bufora zapisu, aby byly uwzglednione w nastepnym generowanym bajcie
                    memcpy(writeBuffer,&writeBuffer[8],writeBufferOffset-8); 
                    //wykorzystaliśmy 8 elementów do budowy bajtu, zatem o tyle zmniejszyła nam się liczba elementów w buforze do zapisu
                    writeBufferOffset = writeBufferOffset-8;
                }
            }
        }
    }
    fclose(inputFileHandle);
    //teraz do pliku musimy dopisać brakujący - niepelny bajt zbudowany z pozostałych w buforze bitow oraz dopełnienia zerami.
    //jesli bufor jest pusty, to dopiszemy w pliku informację o tym, że liczba bitów dopełnionych zerami wynosi 0
   unsigned char bitsToAppend = 0;
    //jeśli w buforze zapisu zostały jakieś niewykorzystane elementy 
    if(writeBufferOffset > 0){
        //do bufora bajtu zapisu wrzucamy bity pozostale w buforze writeBuffer
        for(int b=0; b<writeBufferOffset;b++){ 
            byteToWrite[b] = writeBuffer[b];
        }
        //brakujace bity do pełnego bajtu uzupelniamy zerami
        for(int b=writeBufferOffset; b<8;b++){ 
            byteToWrite[b] = 0;
        }
        //dopisujemy do pliku wygenerowany bajt z uzupelnieniem
        WriteBitBufferToFile(outputFilename,byteToWrite,8);
        //liczba dopelnionych zerami pozycji to roznica miedzy dlugoscia pelnego bajtu a liczba elementow, ktore pozostaly w buforze zapisu 
        bitsToAppend = 8-writeBufferOffset;   
    }
    //do pliku dopisujemy na ostatnim bajcie informacje o tym, ile bitow w ostatnim bajcie danych bylo uzupelnieniem.
    AppendByteToFile(outputFilename,bitsToAppend);

    unsigned int crc = ComputeCRCForFile(outputFilename);
    //WriteIntToFile(outputFilename,crc);
    printf("Obliczone CRC pliku: 0x%x \n",crc);

    return bitsToAppend;
}


problem występuje na koniec nad printf w linijce "unsigned int crc = ComputeCRCForFile(outputFilename);" problemem jest brak deklaracji funkcji "ComputeCRCForFile" co dokładnie powinienem napisać bo po dopisaniu po prostu funkcji na poczatku wywala mi jeszcze gorsze błedy 

komentarz 21 kwietnia 2019 przez gagyn Stary wyjadacz (11,050 p.)
Zmień formatowanie kodu z plain-text na cpp.
komentarz 21 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)
I usuń błagam komentarze
komentarz 21 kwietnia 2019 przez jankustosz1 Nałogowiec (35,880 p.)

@BezBarwny, Sam pisałeś HuffmanCodeItem?

komentarz 21 kwietnia 2019 przez BezBarwny Użytkownik (700 p.)
nie pisze program kompresujacy i dekompresujący ale wspomogłem sie nieco kilkoma kodami z prezentacji wykładowcy dlatego też są nadal komentarze ponieważ jest to nie moj kod i je usune ale na razie wole zostawic by miec pełną swiadomość jak on działa

2 odpowiedzi

0 głosów
odpowiedź 20 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
Wstaw cały kod i napisz jakie błędy dostajesz.
0 głosów
odpowiedź 21 kwietnia 2019 przez Ajver Bywalec (2,430 p.)
Jeśli funkcja ComputeCRCForFile nie jest stworzona przez Ciebie, to prawdopodobnie brakuje Ci jakiejś zewnętrznej biblioteki, którktórą dołączysz porzez #include. Nie znam tej funkcji, więc nie wiem w jakiej bibliotece jest, ale jak wpiszesz nazwę tej funkcji w google, powinno Ci wyskoczyć.

Jeśli jednak jest to Twoja funkcja, którą sam napisałeś, to błąd polega na tym, że jest w zewnętrznym pliku, który również musisz dołączyć #include "wzgledna/sciezka/do/pliku", albo zadeklarować tę funkcję nad funkcją WriteCompressedFile.

Podobne pytania

0 głosów
1 odpowiedź 193 wizyt
pytanie zadane 10 stycznia 2018 w C i C++ przez Tomek112 Początkujący (310 p.)
0 głosów
1 odpowiedź 108 wizyt
pytanie zadane 24 października 2016 w C i C++ przez Beksio Początkujący (260 p.)
0 głosów
2 odpowiedzi 1,008 wizyt
pytanie zadane 6 lipca 2016 w C i C++ przez JAKUBW Nałogowiec (33,470 p.)

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...