Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Pointer in klasse A nach B

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
05.04.2006, 21:04 Uhr
cmos



Hallöchen ich habe ein Frage zu Pointern in Klassen
Klasse A.h

C++:
#include "B.h"
class A
{
     private:
         B *pB;
         int datenA;
     public:
         A(int);        
         void gib_zu_B();
};


Klasse B

C++:
class B
{
    private:
         int datenB;
    public:
         void nimmA(int);
         int gibB();
}


A.cpp

C++:
A::A(int t)
{  datenA=t;}
void A::gib_zu_B()
{
     pB->nimmA(datenA);
}


B.cpp

C++:
void B::nimmA(int temp)
{
     datenB=temp;
}
void B::gibB()
{ return datenB;}



Wenn ich in der main eine Instanz von A und B erzeuge mit

C++:
A a(20);
B b;
a.gib_zu_B();


stürtzt das Programm ab. Stimmt etwas mit den Zeigern nicht ?
A und B existieren, A hat von B kenntnis.

Woran liegt das, hilftm ir bitte jemand?
Danke

Grüße,
cmos

Dieser Post wurde am 05.04.2006 um 21:05 Uhr von cmos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2006, 21:28 Uhr
Tommix



Hallo,
Du hast pB nicht initialisiert, der zeigt sonstwohin.
Du müßtest irgendwie so in der Art machen:

C++:
A::A(int t, B* b)
: datenA(t), pB(b)
{}

// ...

B b;
A a(20, &b);



Gruß, Tommix

Dieser Post wurde am 05.04.2006 um 21:29 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2006, 21:49 Uhr
cmos



Hallo,
danke erstmal für die schnelle Antwort.
Bekomme zwar keine Efhlermeldung, aber den wert den ich A beim Erzeugen gegeben habe
wird B anscheinend nicht übergeben.
Denn wenn ich B ausgeben lasse bekomme ich ne lange Zahl angezeigt.
Muss ich das mit initialisierungsliste machen? Ich habs nur über den normalen Weg mit dem Konstruktor gemacht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.04.2006, 14:26 Uhr
Tommix



Hallo,
also so funzt es bei mir (auch ohne Initialisierungsliste, aber dafür ist sie eigentlich da):

C++:
#include <iostream>

class B
{
private:
    int datenB;

public:
    void nimmA(int);
    void Ausgabe();
};

void B::nimmA(int t)
{
    datenB = t;
}

void B::Ausgabe()
{
    std::cout << datenB << std::endl;
}

class A
{
private:
    B *pB;
    int datenA;
public:
    A(int, B*);        
    void gib_zu_B();
};

A::A(int t, B* b)
{
    datenA = t;
    pB = b;
}

void A::gib_zu_B()
{
    pB->nimmA(datenA);
}


int main()
{
    B b;
    A a(123, &b);
    a.gib_zu_B();
    b.Ausgabe();

    return 0;
}



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.04.2006, 21:07 Uhr
cmos



Irgendwie ist das VStudio 2003 buggy.
Habe es auch so, geht nicht. Habe noch eine extra Klasse hinzugegebn zum kapseln von
A und B, die dort erzeugt.
So dass ich dort B und A mit new erzeuge und den Zeiger beim erstellen von A direkt übergebe.

Und was ist das mit dieser stdafx.h .cpp ?
Das nervt mich irgendwie.
Auch muss ich manchmal alles komplett neu erstellen lassen weil er das abspeichern nicht mitbekommt und die Dateien noch mit dem alten Code kompiliert obwohl was andres drin steht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.04.2006, 08:44 Uhr
(un)wissender
Niveauwart



Zitat:

Auch muss ich manchmal alles komplett neu erstellen lassen weil er das abspeichern nicht mitbekommt und die Dateien noch mit dem alten Code kompiliert obwohl was andres drin steht.


Jupp das ist sehr nervig, ich weiß.
Anonsten funzt obiger Code mit VC 2003. Wenn du es "genauso" hast, dann geht es auch.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.04.2006, 20:49 Uhr
cmos



Hallöle,
im Studio 6 funktioniert es nun.
Ich werd mir mal das 2005er ziehn (ich darf das "ziehn" -> MSDN AA), hoffe die haben das dort bissl besser gemacht.
 
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: