Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Rekursiver Zugriff auf Objekte anderer Klassen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.07.2009, 13:03 Uhr
~lnxuser1234
Gast


Hallo,

Ich muss über a_class auf "ii" in c_class zugreifen, siehe Quellcode.
Wie funktioniert das?

(Das Problem ergibt sich bei meinem gsoap-Client, ich kann nicht einfach "c_class" ansteuern,

sondern muss über "a_class")

Vielen Dank für Eure Hilfe


test_classes_.h:

Code:
class a_class;
class b_class;
class c_class;


class a_class
{
public:
        a_class();
        ~a_class();
        b_class*        b_obj;
};


class b_class
{
public:
        b_class();
        ~b_class();
        c_class*     c_obj;
};


class c_class
{
public:
        c_class();
        ~c_class();
        int     ii;
};




test_classes_.cpp:

Code:
1  #include "test_classes_.h"
2  #include <iostream>
3  using namespace std;
4
5  int main()
6  {
7         int erg;
8         a_class a;
9         //b_class b;
10        //c_class c;
11
12        //variable in c_class setzen
13        a->b_obj->c_obj.ii = 1;
14
15        //variable in c_class auslesen
16        erg = a->b_obj->c_obj.ii;
17
18        std::cout<<"erg von ii  = "<< erg <<std::endl;
19
20        return 0;
21  }




Fehlermeldung:
test_classes_.cpp: In function »int main()«:
test_classes_.cpp:13: Fehler: Basisoperand von »->« hat Nicht-Zeiger-Typ »a_class«
test_classes_.cpp:16: Fehler: Basisoperand von »->« hat Nicht-Zeiger-Typ »a_class«
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.07.2009, 13:19 Uhr
Kest
saint


Hi!

a ist kein Zeiger. Musst schon das Pünktchen verwenden.
c_obj ist ein Zeiger. Musst schon das Pfeilchen verwenden.
a.b_obj->c_obj->ii = 1;
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 14.07.2009 um 13:27 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.07.2009, 13:49 Uhr
~lnxuser1234
Gast


Herzlichen Dank

erhalte jetzt:

test_classes_.cpp.text+0x76): undefined reference to `a_class::a_class()'
test_classes_.cpp.text+0x9a): undefined reference to `std::cout'
test_classes_.cpp.text+0x9f): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
test_classes_.cpp.text+0xb0): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
test_classes_.cpp.text+0xb8): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&'
test_classes_.cpp.text+0xc0): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)'
test_classes_.cpp.text+0xd0): undefined reference to `a_class::~a_class()'
test_classes_.cpp.text+0xf0): undefined reference to `a_class::~a_class()'
/tmp/cc1bhkUs.o.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld gab 1 als Ende-Status zurück
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.07.2009, 13:55 Uhr
Kest
saint


Hast ja in deinem test_classes_.h nur Deklarationen. Musst alles noch definieren.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 14.07.2009 um 13:55 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.07.2009, 15:40 Uhr
~lnxuser1234
Gast


Dankeschön.
Das Problem hat sich erledigt. So klappts:


Code:
#include "test_classes_.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

/*
* Konstruktor
*/
a_class::a_class()
{
    a_class::b_obj = new b_class;
}
a_class::~a_class()
{
}

b_class::b_class()
{
    b_class::c_obj = new c_class;
}
b_class::~b_class()
{
}

c_class::c_class()
{
    c_class::ii=0;
}
c_class::~c_class()
{
}



/*
* Main
*/
int main()
{
    int erg;
    string str_erg;
    stringstream stream_erg;

    a_class* a = new a_class;
    b_class* b = new b_class;
    c_class c;
    
    /*
     * ii setzen
     */
    a->b_obj->c_obj->ii = 1;

    /*
     * ii auslesen
     */
    erg = a->b_obj->c_obj->ii;
    
    /*
     * Ausgabe
     */
    stream_erg << erg;
    str_erg = stream_erg.str();
    std::cout << "erg von ii  = " << str_erg.c_str() <<std::endl;

    return 0;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: