Unlimited Temat założony przez niniejszego użytkownika |
[Vector i klasa] Jak wywołać funkcję? » 2012-06-07 21:48:43 Witam. Mam problem z wywołaniem funkcji w tym programie: #include <iostream> #include <string> #include <vector> #include <cstdlib> using namespace std;
class samochody { private: string marka, model, paliwo; int pojemnosc, rok; string Xmarka, Xmodel, Xpaliwo; int x, Xpojemnosc, Xrok; samochody( string xmarka, string xmodel, string xpaliwo, int xpojemnosc, int xrok ); vector < samochody > samochod; public: void wyswietl(); void dodaj(); void edytuj(); void usun(); };
samochody::samochody( string xmarka, string xmodel, string xpaliwo, int xpojemnosc, int xrok ) : marka( xmarka ) , model( xmodel ) , paliwo( xpaliwo ) , pojemnosc( xpojemnosc ) , rok( xrok ) { }
void samochody::wyswietl() { for( int i = 0; i < samochod.size(); i++ ) { cout << endl; cout << i + 1 << ". Marka: " << samochod[ i ].marka << endl; cout << " Model: " << samochod[ i ].model << endl; cout << " Paliwo: " << samochod[ i ].paliwo << endl; cout << " Pojemnosc: " << samochod[ i ].pojemnosc << endl; cout << " Rok: " << samochod[ i ].rok << endl; } cout << endl; system( "pause" ); }
void samochody::dodaj() { cout << endl; cout << "Podaj marke: "; cin >> Xmarka; cout << "Podaj model: "; cin >> Xmodel; cout << "Podaj paliwo: "; cin >> Xpaliwo; cout << "Podaj pojemnosc: "; cin >> Xpojemnosc; cout << "Podaj rok: "; cin >> Xrok; samochod.push_back( samochody( Xmodel, Xmarka, Xpaliwo, Xpojemnosc, Xrok ) ); cout << endl << "Dodano pomyslnie!" << endl << endl; system( "pause" ); }
void samochody::edytuj() { cout << endl; cout << "Podaj index pojazdu: "; cin >> x; cout << endl << "Aktualne zestawienie dla indeksu nr " << x << ":" << endl; cout << x << ". Marka: " << samochod[ x - 1 ].marka << endl; cout << " Model: " << samochod[ x - 1 ].model << endl; cout << " Paliwo: " << samochod[ x - 1 ].paliwo << endl; cout << " Pojemnosc: " << samochod[ x - 1 ].pojemnosc << endl; cout << " Rok: " << samochod[ x - 1 ].rok << endl; cout << endl << "Podaj nowe zestawienie: " << endl; cout << x << ". Marka: "; cin >> samochod[ x - 1 ].marka; cout << " Model: "; cin >> samochod[ x - 1 ].model; cout << " Paliwo: "; cin >> samochod[ x - 1 ].paliwo; cout << " Pojemnosc: "; cin >> samochod[ x - 1 ].pojemnosc; cout << " Rok: "; cin >> samochod[ x - 1 ].rok; cout << endl << "Zedytowano pomyslnie!" << endl << endl; system( "pause" ); }
void samochody::usun() { cout << endl; cout << "Podaj index pojazdu: "; cin >> x; samochod.erase( samochod.begin() + x - 1 ); cout << endl << "Usunieto pomyslnie!" << endl << endl; system( "pause" ); }
int main() { int wybor; do { system( "cls" ); cout << "[1] Wyswietl samochody" << endl; cout << "[2] Dodaj nowy samochod" << endl; cout << "[3] Edytuj samochod" << endl; cout << "[4] Usun wpis samochodu" << endl; cout << "[0] Zakoncz" << endl << endl; cout << "Twoj wybor: "; cin >> wybor; switch( wybor ) { case 1: { break; } case 2: { break; } case 3: { break; } case 4: { break; } } } while( wybor != 0 ); return 0; } Otóż gdy w int main() próbuje zadeklarować zmienną np. samochody zmienna; to dostaje błąd o treści: C:\Users\AcerAS-7552G\Desktop\Untitled1.cpp|104|error: no matching function for call to 'samochody::samochody()'| przez co nie mogę później wywołać funkcji przez dopisanie zmienna.wyswietl(); itp. Gdzie leży problem? |
|
xevuel |
» 2012-06-07 21:50:38 Podczas pisania samochod zmienna wywołuje się konstruktor o postaci samochod::samochod(), którego ty nie masz zadeklarowanego w klasie. |
|
Unlimited Temat założony przez niniejszego użytkownika |
» 2012-06-07 21:51:49 Mam zadeklarowane. |
|
xevuel |
» 2012-06-07 21:52:45 Nie masz. samochody( string xmarka, string xmodel, string xpaliwo, int xpojemnosc, int xrok ); to nie jest ten konstruktor o którym mówiłem. |
|
Unlimited Temat założony przez niniejszego użytkownika |
» 2012-06-07 21:54:50 Wywołuję samochod y zmienna; więc konstruktor to samochody::samochody(). Edit: No nie wiem może ja się mylę to proszę powiedz jak wywołać tą funkcję bo już naprawdę nie wiem. Wcześniej bez udziału vector'a zawsze wszystko dobrze było i działało. Edit: W części publicznej klasy wywołałem konstruktor samochody(); i poniżej klasy dodałem wpis: I mam pytanie czy to takie puste ma zostać? Program działa. |
|
xevuel |
» 2012-06-07 22:08:30 Ale ty nie masz tego konstruktura! Wiesz, czym się różni to: samochody::samochody( string xmarka, string xmodel, string xpaliwo, int xpojemnosc, int xrok ); od tego: samochody::samochody(); ? Aby użyć pierwszego musiałbyś wywołać samochody zmienna( "Opel", "Jakiś tam", "Benzyna", 1000, 1492 ); Rozumiesz? //edit: Ma zostać puste, no chyba, że chcesz jakiejś zmiennej przypisać na starcie daną wartość, np. przy klasie class Foo { private: int abc; public: Foo(); };
możesz użyć konstruktora o postaci: Foo::Foo() { this->abc = 0; }
aby wyzerować zmienną abc. |
|
Admixior |
» 2012-06-07 22:10:22 Nie masz zdefiniowanego konstruktora bez parametrów czyli samochody::samochody(); możesz albo zdefiniować sobie taki konstruktor w klasie umieścić: samochody(){} //nic on nie bedzie robił albo wywoływać konstruktor który od razu umieszcza pierwsze auto: samochody zmienna(tutaj marka,model...);//tak jak masz to w kostruktorze //PS: dziwi mnie pomysł kodu. W jaki sposób ty go zaplanowałeś. Dlaczego w klasie samochody jest vector< samochody > samochod; nie lepiej tę definicję zrobić statyczną, albo jeżeli nie potrafisz to po prostu globalną. Bo w takim razie każdy samochód będzie mógł posiadać inne samochody samochody x(...); x.dodaj(...); x.samochody[ 0 ].dodaj(...); x.samochody[ 0 ].samochody[ 0 ].dodaj(...);
Ale najlepiej byłoby chyba zrobienie klasy samochod która będzie zawierała tylko marke model i inne info... I z klasy tej co już masz usunąć zmienne marke model... i w vectorze dać: vector< samochod > samochody; //wtedy bedziesz miał samochody w w wektorze (bez dziwnego efektu że samochody mają inne samochody) Jeżeli mnie nie zrozumiałeś, nie przejmuj się. W końcu dopiero zaczynasz. Kiedyś zrozumiesz o co mi chodziło jeżeli będziesz się dalej zagłębiał w c++. //ups spóźniłem się |
|
Unlimited Temat założony przez niniejszego użytkownika |
» 2012-06-07 22:11:09 Tak właśnie tak zrobiłem i powiedz mi czy wtedy ta zmienna zmienna sobie automatycznie przypisuje dany konstruktor? Dosyć fajne szczerze powiedziawszy... |
|
« 1 » 2 |