Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Pointer von Membervariablen

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 < [ 2 ]
000
03.11.2004, 14:03 Uhr
~Susanne
Gast


Hi
Hab mal wieder ein Problem. Ich habe in meiner SDI-Anwendung 3 Eingabefelder mit Member-Variablen versehen vom Typ CString. Diese Member-Variablen möchte ich jetzt in einer Funktion mit neuen Werten versehen. Ich kann zwar die 3 Werte mit dem Aufruf der Funktion übergeben aber ich kann ja nur einen wieder zurückgeben. Ich dachte mir jetzt das ich vielleicht mit Pointern arbeiten könnte aber das bekomme ich irgendwie nicht hin.

Deklaration der Funktion:

static void SetInfoMessage(int message, CString* m_InfoWindow);

Definition der Funktion:

void CData::SetInfoMessage(int message, CString* m_InfoWindow)
{
....
}

aus der View heraus rufe ich die Funktion auf mit :

CData::SetInfoMessage(0,*m_InfoWindow);

da bekomme ich aber folgenden Fehler:

Konvertierung des Parameters 2 von 'class CString' in 'class CString *' nicht moeglich

Könnt ihr mir sagen was ich falsch mache?

Gruß
Susanne
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.11.2004, 14:14 Uhr
ao

(Operator)


m_InfoWindow ist so deklariert, ja?


C++:
CString * m_InfoWindow;


SetInfoMessage will einen Pointer auf CString, und genau das ist m_InfoWindow. Also muss der Aufruf einfach so sein:


C++:
CData::SetInfoMessage (0, m_InfoWindow);


ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.11.2004, 14:47 Uhr
~Susanne
Gast


Ne hab die Variable mit dem Assi erstellt:


C++:
  CString    m_InfoWindow;



Da kann ich doch nicht einfach einen Pointer von machen. Auf jeden Fall geht dann die Meckerei los zum Beispiel bei:


C++:
    DDX_Text(pDX, IDC_INFOWINIDOW, m_InfoWindow);



Oder muß ich mir nochmal seperat einen Pointer auf diese Variable festlegen mit


C++:

CString* Pointer = m_InfoWindow;


und den dann übergeben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.11.2004, 14:55 Uhr
Tommix



Hallo,

C++:
DDX_Text(pDX, IDC_INFOWINIDOW, &m_InfoWindow);
// bzw.
CString* Pointer = &m_InfoWindow;



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.11.2004, 15:03 Uhr
~Susanne
Gast


Bei der ersten Variante kommen Fehler wie:


C++:
'DDX_Text' : Durch keine der 12 Ueberladungen kann Parameter 3 vom Typ 'class CString ** ' konvertiert werden
'DDV_MaxChars' : Konvertierung des Parameters 2 von 'class CString ** ' in 'const class CString &' nicht moeglich



und bei der zweiten Methode gehts so los:


C++:
'CPB_ToolView::m_InfoWindow' : Element der einschliessenden Klasse ist kein Typname, nicht statisch und keine Aufzählung
error C2065: 'm_InfoWindow' : nichtdeklarierter Bezeichner
error C2258: Ungueltige Syntax fuer rein virtuelle Methode; '= 0' erforderlich
error C2252: 'Pointer' : Nur Funktionen koennen rein virtuell deklariert werden



irgendwie noch nicht das wahre oder ich mach was falsch...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.11.2004, 15:27 Uhr
Tommix



Wenn Du, wie gepostet

Zitat von Susanne:

Ne hab die Variable mit dem Assi erstellt:

C++:
  CString    m_InfoWindow;


Da kann ich doch nicht einfach einen Pointer von machen.


gemacht hast, verwendest Du m_infoWindow, wenn Du einen String brauchst und &m_InfoWindow für einen Pointer auf selbigen.
Was ich bei DDX_Text geschrieben habe ist Quatsch. Die Zeile CString* Pointer... muß innerhalb einer Klassenfunktion stehen.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.11.2004, 08:15 Uhr
~Susanne
Gast


Das klappt. Ich kann den Pointer übergeben. Wie änder ich denn jetzt den Wert der Membervariablen in der Funktion über den Pointer?

In aufrufender Klassenfunktion definert
CString* Pointer = &m_InfoWindow;

Funktionsrumpf:

C++:
void CData::SetInfoMessage(int message, CString* Pointer)
{......}




Und wie kann ich den Pointer in mehreren Klassenfunktionen verwenden. Jetzt habe ich Ihn ja nur ein einer definiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.11.2004, 09:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du kannst nun mit


C++:
Pointer->MemberfunktionvonCString(...)



drauf zugreifen oder wenn du ihm was zuweisen willst:


C++:
(*Pointer) = "Hello World";


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.11.2004, 09:35 Uhr
~Susanne
Gast



Zitat von FloSoft:
du kannst nun mit


C++:
Pointer->MemberfunktionvonCString(...)



drauf zugreifen


Das hab ich nicht verstanden. Also am Ende möcht ich 3 pointer haben die ich der Funktion übergebe. Ich möchte aber beim Aufruf dieser Funktion in verschiedenen Memberfunktionen einer View - Datei nicht jedes mal die 3 Pointer neu deklarieren und definieren sondern ich möchte 3 Pointer haben die ich in allen Funktionen der View-Datei einsetzen kann.


Gruß Susanne
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.11.2004, 15:03 Uhr
~Susanne
Gast


Habt ihr mich schon aufgegeben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


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: