Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przekazywanie obiektu klasy przez referencję do funkcji

Ostatnio zmodyfikowano 2014-08-30 22:55
Autor Wiadomość
zinex
Temat założony przez niniejszego użytkownika
Przekazywanie obiektu klasy przez referencję do funkcji
» 2014-08-30 22:28:42
Witam,
Od niedawna bawię się w programowanie więc proszę o wyrozumiałość. W ramach ćwiczenia poznanych technik programowania c++ wymyśliłem sobie program, który wykorzystuje listę do przechowywania danych. Lista ta jest zagnieżdżona w specjalnie do tego utworzonej klasie. Problem polega na przekazaniu obiektu tej klasy jako referencji do funkcji(a nawet do trzech). W każdym przypadku kompilator wyświetla takie same błędy:
1.error: invalid initialization of non-const reference of type 'Lista&' from a temporary of type 'Lista (*)()'
2.error: in passing argument 1 of 'Lista& AddBookMenu(Lista&)'
Oto prototyp klasy zawierającej listę wraz z problematycznymi funkcjami:
C/C++
class Lista
{
private:
    int counter;
    struct Element { Book obj; struct Element * next; }; //Book obj to obiekt wcześniej utworzonej klasy Book.
    Element * first;
    Element * last;
    void set_available( const string file_name );
public:
    Lista();
    Lista( const Lista & object );
    ~Lista();
    bool add_element( Book & obj, const string file_name = "available.txt" );
    bool delete_element( Book & obj, string Temp, const string file_name = "available.txt" );
    bool show_available();
    int elements_number() { return counter; }
};
//Trzy problematyczne funkcje poniżej:
void AddBookMenu( Lista & object );
void HireBookMenu( Lista & object1, Lista & object2 );
void PhraseBookMenu( Lista & object1, Lista & object2 );
Nie wiem w tym przypadku gdzie leży problem, czy ktoś mógłby mi to rozjaśnić?Czy problemem jest to, że obiekt klasy Lista zawiera jako składowe wskaźniki?
P-116423
akwes
» 2014-08-30 22:41:36
Pokaż jak wywołujesz funkcję. Wywołujesz ją z argumentem "Lista&" czy "Lista"?
P-116428
zinex
Temat założony przez niniejszego użytkownika
» 2014-08-30 22:47:29
@Akwes funkcję wywołuję w main w następujący sposób:
C/C++
int main()
{
   
   
   
    Lista avbiblioteka(); //tworzę dwa obiekty typu Lista.
    Lista navbiblioteka();
   
    char choose = '0';
    while( choose != '4' )
    {
        std::cout << "1.Dodaj ksi/245/276k/251 do zbioru.\n";
        std::cout << "2.Wypo/276ycz ksia/276k/251.\n";
        std::cout << "3.Zwrot ksi/245żki.\n";
        std::cout << "4.Zamknij program.\n";
        std::cout << "Wybierz odpowiedni klawisz: ";
        while( std::cin >> choose && choose != '1' && choose != '2' && choose != '3' && choose != '4' )
             std::cout << "Wybierz odpowiedni klawisz: ";
       
        if( choose == '1' )
             AddBookMenu( avbiblioteka ); //tutaj wywołuję funkcję AddBookMenu();
        else if( choose == '2' )
             HireBookMenu( avbiblioteka, navbiblioteka ); //tutaj HireBookMenu
        else if( choose == '3' )
             PhraseBookMenu( navbiblioteka, avbiblioteka ); //tutaj PhraseBookMenu
       
        system( "cls" );
    }
   
   
   
    return 0;
}
Jeśli chodzi o definicje tych funkcji to tam oczywiście jest tak samo jak w prototypie.
P-116430
1aam2am1
» 2014-08-30 22:52:48
C/C++
Lista avbiblioteka;
Bez nawiasów.
P-116432
zinex
Temat założony przez niniejszego użytkownika
» 2014-08-30 22:55:57
Ale głupi błąd. Dzięki @1aam2am1, teraz działa ;)
P-116433
« 1 »
  Strona 1 z 1