Błąd w pliku .cpp w 102 linijce rzecze Cannot call member function without an object. Tylko nie za bardzo wiem gdzie właściwie mam zainicjalizować obiekt Klasy magazyn. W zamyśle mam jeszcze napisać m.in. funkcję która przy uruchomieniu programu tworzy obiekt klasy magazyn i zapełnia wektor danymi z pliku. Czy napisanie takiej funkcji i umiejscowienie jej w pliku .cpp przed metodą dostawa załatwi sprawę? Jeśli nie to co proponujecie?
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(string, int, 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);
};
//KLASY
//----------------------------------------------------------------------------------------------
plik .cpp
#include "projekt.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
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-------------------
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;
}
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);
if(Magazyn::czy_jest_w_magazynie(nazwa) == true){ //sprawdz czy jest w magazynie
for( int i = 0; i < magazyn.size(); i++){ //przeszukuj magazyn
if(magazyn[i].nazwa_tow == nazwa){ //jesli jest - dodaj ilosc i zapytaj czy aktualizowac cene
magazyn[i].ilosc += ile;//dodaj ilosc
cout<<endl<<"Czy zmienic cene z "<<magazyn[i].cena<<" na "<<cena<<"? (T/N)";//zapytaj czy zmienic cene
cin>>zmiana;
if (zmiana == T || zmiana == t){// jesli TAK - zmien cene
magazyn[i].cena = cena;
}
else break;
}
else break;
}
}
else{//jesli nie ma w magazynie - dodaj do magazynu
Towar telewizor(nazwa, ile, 4111, 1999.99);
magazyn.push_back(telewizor);
}
else cout<<"Dodanie towaru nieudane - nieznany towar"<<endl;
cout<<"Dodano do magazynu";
}