Problem z kompilowaniem w Visual Studio

0

Cześć, prowadzący na zajęciach podesłał nam fragment kodu. Jemu w Dev-C++ wszystko śmiga i w code::blocks tak samo natomiast problem pojawia się kiedy kod wklejam do Visual Studio, nagle wywala błędy i nie chce skompilować programu. Zgaduję że Visual Studio działa na nowszych standardach natomiast w jakich fragmentach należałoby poprawić kod żeby Visual go przepuszczał?

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


using namespace std;

struct cos
{
    int id;
    char nazwa[20];
};
cos zm;

void zapis(char*, cos*);
void odczyt_p(char*, cos*, int);
void odczyt(char*, cos*);

int main()
{
    zapis("plik.dat", &zm);
    int rekord=0; cout<<"Ktory rekord: "; cin>>rekord;
    //odczyt_p("plik.dat",&zm, rekord);
    odczyt("plik.dat", &zm);
    getch();
    return 0;
}

void zapis(char* p, cos* r)
{
    cout << "Podaj id: ";
    cin >> r->id;
    cout << "Podaj nazwe: ";
    cin >> r->nazwa;

    ofstream z;
    z.open(p, ios::binary | ios::app);
    z.write((char*)r, sizeof(*r));
    z.close();
}

void odczyt_p(char* p, cos* r, int k)
{
    ifstream z(p, ios_base::binary);
    int ktory = (k - 1) * sizeof(*r);
    z.seekg(ktory);
    z.read((char*)r, sizeof(*r));
    cout << r->id << " - " << r->nazwa << "\n";
    z.close();
}

void odczyt(char* p, cos* r)
{
    ifstream z(p, ios_base::binary);
    z.seekg(0, ios::end);
    int dl = z.tellg();

    int ktory = 0;
    z.seekg(ktory);

    while (ktory < dl)/*!z.fail()*/ {
        z.read((char*)r, sizeof(*r));
        cout << r->id << " - " << r->nazwa << "\n";
        ktory += sizeof(*r);
        z.seekg(ktory);
    }
    z.close();
}

0

Wklej te bledy, zobaczymy

0

Na początku program nie rozpoznawał struktury "cos" lecz zmieniając nazwę na "coscos" problem znikał. Podobnie było z getch() i zamianą na _getch(). Jednak program nadal się nie kompilował wywalając błąd

error C2664: „void odczyt(char *,coscos *)”: nie można dokonać konwersji argumentu 1 z „const char [9]” do „char *”

Zmiana w deklaracji char* na const char* generuje natomiast kolejny błąd (nie jestem pewny czy ta zmiana na pewno jest dobrą zmianą)

error LNK2019: nierozpoznany symbol zewnętrzny "void __cdecl odczyt(char const *,struct coscos *)" (?odczyt@@YAXPBDPAUcoscos@@@Z) przywołany w funkcji _main

0

Masz problem z nazywaniem zmiennych tak samo jak funkcje w bibliotece standardowej np cos o funkcja matematyczna cosinus.
Wywal tego getch() użyj jakiegoś IDE z tego tysiąclecia które zatrzyma console przed zamknięciem.
W odczycie całości nie musisz używać seekg() zwyczajnie czytaj jedna po drugiej.

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