klasy funkcje i operacje na plikach

0

Witam. Pisze sobie taki tam program który otworzy plik kiedy będzie potrzeba i zamknie jak skończy.Mam taki kod(patrz niżej), i wyskakują mi dwa błędy w funkcji 'main'

Line: | Massage:
8 | Undefined reference to 'fileOP::write(std::string)'
9 | Undefined reference to 'fileOP::show()'

co jest źle w tym kodzie i co tu zmienić?
(C++ uczę się od niedawna)

 
main.cpp:

#include "fileop.h"
// C:\Users\Admin\Desktop\sdl cos\pliki\bin\Debug\baza.txt
int main()
{
    fileOP test;
    string tekst;
    getline(cin,tekst);
    test.write(tekst); //ma zapisać tekst pobrany linijkę wyżej -- tu jest linia 8
    test.show(); //ma pokazać to co zapisał -- a tu 9
    return 0;
}


fileop.h:

#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdlib.h>
#include <string>

using namespace std;
fstream map;
class fileOP
{
    public:
    int open();
    int close();
    int write(string tekst);
    int show();

};
int open()
{
    map.open( "C:\\Users\\Admin\\Desktop\\sdl cos\\pliki\\bin\\Debug\\baza.txt", ios::in | ios::out | ios::binary);
    if(!map.good()){cout<<"error";}
    return 0;
}

int close()
{
    map.close();
    return 0;
}

int write(string tekst)
{
        open();
        map.write( & tekst[ 0 ], tekst.length() );   //zapisuje dane poczynając od 0 indeksu
        close();
        return 0;
}

int show()
{
    char bufor[1024];
    open();
    map.read( bufor, 1024 );   //wczytuje tyle danych ile się zmieści do bufora
    cout << "Wczytano " << map.gcount() << " bajtów do bufora" << endl;
    for(int i=0;i<map.gcount();i++)
    {
        cout<<bufor[i];
    }
    close();
    return 0;
}
0

int fileOP::open() { ...
pozostałe tak samo.

0

Dzięki
nie zauważyłem tego.

0

Chciałem teraz zrobić funkcję zwracająca tablice ale przez

 
...
int fileOP::show()
{
    char bufor[1024];
    open();
    map.read( bufor, 1024 );   //wczytuje tyle danych ile się zmieści do bufora
    cout << "Wczytano " << map.gcount() << " bajtów do bufora" << endl;
    close();
    return bufor;
}
 main.cpp:

#include "fileop.h"
// C:\Users\Admin\Desktop\sdl cos\pliki\bin\Debug\baza.txt
int main()
{
    fileOP test;
    string tekst;
    getline(cin,tekst);
    test.write(tekst);
    int y[1024]=test.show();
    cout<<y[2];
    return 0;
}

nie działa.
Przeczytałem że potrzeba użyć wskaźnika ale nie wiem jak to zrobić

0

przenieś bufor do klasy lub:
static char bufor[1024]; // to jest tak jakby zmienna globalna ale dostępna tylko wewnątrz funkcji, więc ma wady

0

mam program który zapisuje int-a w dwóch char-a a następnie je łączy.
problem taki że wartość po złączeniu jest inna dlaczego tak się dzieje?

 
klasy.h:

class dataOP
{
    public:
        int tohigh(int iliczba);
        int tolow(int iliczba);
        int toint(char low,char high);
};

int dataOP::tolow(int iliczba)
{
    unsigned char low=0;
    low=static_cast<char>(iliczba);
    return low;
}
int dataOP::tohigh(int iliczba)
{
    unsigned char high=0;
    high=static_cast<char>(iliczba>>8);
    return high;
}
int dataOP::toint(char low,char high)
{
    int iliczba=static_cast<unsigned>(low)+static_cast<unsigned>(high<<8);
    return iliczba;
}

main.cpp:

#include "klasy.h"
int main()
{

    dataOP dane;
    int cos=5555;

    unsigned char xy1=dane.tolow(cos);
    unsigned char xy2=dane.tohigh(cos);
    cout<<static_cast<int>(xy1)<<" "<<static_cast<int>(xy2)<<endl;
    cout<<dane.toint(xy1,xy2)<<endl;
    cout<<cos<<endl;
    return 0;
}
0

int iliczba=static_cast<unsigned>(low)+(static_cast<unsigned>(high)<<8);
high<<8 == 0 ponieważ high ma tylko 8 bitów.
Tak a propos int ma 4 bajty dla 32 bitowych systemów, 16-bitowych już prawie nie ma, no chyba że urządzenia.

0

Dzięki zaraz poprawie kod. Po przeczytaniu tego:

int | 2 lub 4 bajty | zależnie od rozmiaru, taki jak: short lub long int | rozmiar zależy od kompilatora

myślałem ze long int ma 4 bajty a int tylko 2.

============================================================================================
To co chciałem stworzyć jest bezsensu.
w jaki sposób przechowywać inty w pliku żeby można było je łatwo odczytać??

0
Kurator125 napisał(a):

myślałem ze long int ma 4 bajty a int tylko 2.

1= sizeof(char)<sizeof(short)<=sizeof(int)<=sizeof(long)<sizeof(long long)

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