Proszę o pomoc - w którym miejscu zainicjalizować obiekt klasy magazyn aby pozbyć się komunikatu cannot call member function without an object? Obiekt tej klasy będzie istniał tylko jeden przez cały czas działania programu.
plik .h
#include <iostream>
#include <vector>
using namespace std;
//---------------------------------------------------------------------------------
//FUNKCJE
void menu_glowne();
string male_litery(string napis);
//FUNKCJE
//----------------------------------------------------------------------------
//KLASY
class Towar {
friend class Magazyn;
string nazwa_tow;
int ilosc;
int indeks_tow;
float cena_tow;
public:
Towar(const string, int, const int, float);
~Towar();
void dostawa();
void odtowarowanie();
};
class Magazyn {
friend class Towar;
protected:
vector < Towar > magazyn;
public:
void wczytaj_magazyn();
void wyswietl_magazyn();
void zapisz_magazyn();
bool czy_jest_w_magazynie(string nazwa);
Magazyn();
~Magazyn();
};
//KLASY
//----------------------------------------------------------------------------------------------
plik.cpp
#include "projekt.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
#include <windows.h>
using namespace std;
vector < Towar > magazyn;
void menu_glowne(){
cout << "|-------------PROGRAM OBSLUGI SKLEPU--------------|" << endl;
cout << "| 1. SPRZEDAZ |" << endl;
cout << "| 2. ZAMOWIENIE |" << endl;
cout << "| 3. MAGAZYN |" << endl;
cout << "| 4. BAZA DOKUMENTOW |" << endl;
cout << "| 5. ZAMKNIJ PROGRAM |" << endl;
cout << "|-------------------------------------------------|" << endl;
int akcja;
cin>>akcja;
switch(akcja){
case 1:
{
break;
}
case 2:
{
break;
}
case 3:
{
break;
}
case 4:
{
break;
}
case 5:
{
exit(0);
}
}
}
//--------------OSOBNE FUNCKJE-------------
string male_litery(string napis){
for( char & znak: napis ) {
if( znak >= 'A' && znak <= 'Z' ) {
znak += 32;
}
}
return napis;
}
//-------------KLASA MAGAZYN-------------------
void Magazyn::wczytaj_magazyn(){ //odczyt z pliku
Magazyn magazyn();
fstream plik;
plik.open("magazyn.txt", ios::in);
if(plik.good()==false) {
cout<<"Nie mozna wczytac magazynu";
exit(0);
}
string linia, naz;
int nr_linii = 1, ile, ind;
float cen;
while(getline(plik, linia)){
switch(nr_linii){
case 1:
{
naz = linia;
nr_linii++;
break;
}
case 2:
{
ile = atoi(linia.c_str());
nr_linii++;
break;
}
case 3:
{
ind = atoi(linia.c_str());
nr_linii++;
break;
}
case 4:
{
cen = atof(linia.c_str());
Towar * nowy = new Towar(naz, ile, ind, cen);
magazyn.push_back(nowy);
nr_linii = 1;
break;
}
}
}
plik.close();
}
void Magazyn::zapisz_magazyn(){//zapis do pliku
fstream plik;
plik.open("magazyn.txt", ios::trunc | ios::app);
string naz;
int ile, ind;
float cena;
for( int i = 0; i < magazyn.size(); i++){
naz = magazyn[i].nazwa_tow;
ile = magazyn[i].ilosc;
ind = magazyn[i].indeks_tow;
cena = magazyn[i].cena_tow;
plik<<naz<<endl;
plik<<ile<<endl;
plik<<ind<<endl;
plik<<cena<<endl;
}
plik.close();
}
bool Magazyn::czy_jest_w_magazynie(string nazwa){
if(magazyn.empty() == true){
return false;
}
else{
for( int i = 0; i < magazyn.size(); i++){
if(magazyn[i].nazwa_tow == nazwa){
return true;
}
else return false;
}
}
}
//-------------KLASA TOWAR---------------
Towar::Towar(string n, int il, int in, float cen){
nazwa_tow = n;
ilosc = il;
indeks_tow = in;
cena_tow = cen;
}
Towar::~Towar(){
cout<<"Destruktor klasy Towar";
}
void Towar::dostawa(){
string nazwa;
int ile, indeks;
float cena;
char zmiana;
cout<<"Przyjecie magazynowe"<<endl;
cout<<"Nazwa towaru: "; cin>>nazwa;
cout<<"Ilosc: "; cin>>ile;
cout<<"Indeks - szesc cyfr: "; cin>>indeks;
cout<<"Cena: "; cin>>cena;
nazwa = male_litery(nazwa);
}