Zum Inhalt springen

VC++ Datenübertragung in externe Klassen


Empfohlene Beiträge

Ich habe weiterhin das Problem, dass sobald ich die Data.h vor oder in der/die Programm2.h include ich die Fehler bekomme:

error C2065: 'IDD_DIALOG1' : nichtdeklarierter Bezeichner //IDD_DIALOG1 ist der PseudoDialog der Datenklasse, den ich angelegt habe

error C2057: Konstanter Ausdruck erwartet //bezieht sich auf dieselbe Zeile im Programm

Beide Fehlermeldungen beziehen sich auf:


public:

	CData(CWnd* pParent = NULL);   // Standardkonstruktor


// Dialogfelddaten

	//{{AFX_DATA(CData)

==>  enum { IDD = IDD_DIALOG1 };

		// HINWEIS: Der Klassen-Assistent fügt hier Datenelemente ein

	//}}AFX_DATA

Kann es sein, dass es ein Problem ist, die Datenklasse als Basisklasse von CDialog zu nehmen? mein Code (Zur Info): Programm2.h
#include "Data.h"


#if !defined(AFX_PROGRAMM2_H__199936CB_F941_48C9_8013_8CC5B5E81F2F__INCLUDED_)

#define AFX_PROGRAMM2_H__199936CB_F941_48C9_8013_8CC5B5E81F2F__INCLUDED_


#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000


#ifndef __AFXWIN_H__

	#error include 'stdafx.h' before including this file for PCH

#endif


#include "resource.h"		// Hauptsymbole


class CProgramm2App : public CWinApp

{

public:

	CProgramm2App();


	 CData mData;

... 	

Programm2.cpp
 

#include "stdafx.h"

#include "Programm2.h"

#include "Parent.h" //PropertySheet

#include "Programm2Dlg.h" //PropertyPage

#include "Dialog2.h"  //PropertyPage

...

Data.cpp

#include "stdafx.h"

#include "Programm2.h"

#include "Data.h"


#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

...

und so sehen dann die Pages aus: z.B. Dialog1:

#include "stdafx.h"

#include "Programm2.h"

#include "Programm2Dlg.h"


#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

...

Kannst daran Du sehen, warum diese Fehlermeldung kommt?

2. Wenn ich mich nun in der PropertyPageklasse CProgramm2Dlg befinde, wie genau sage ich dann dem Pointer auf die Hauptklasse(CProgramm2App *Bezug), dass er sich die Adresse aus der Variable der Datenklasse nehmen soll (CData Daten;) , die in der Hauptklasse deklariert wurde?

Das ist wahrscheinlich ziemlich simpel, weswegen Du es nicht weiter erwähnst, aber ich habe wirklich zur Zeit keine Ahnung wie ich das basteln soll.

Gruß

KK

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann es sein, dass es ein Problem ist, die Datenklasse als Basisklasse von CDialog zu nehmen?
Warum ist deine Datenklasse überhaupt von CDialog abgeleitet? Ist deine Datenklasse ein Dialog? Falls nicht, ist das ein Designfehler.

error C2065: 'IDD_DIALOG1' : nichtdeklarierter Bezeichner

Füg in der Datei, in der dieser Fehler gemeldet wird, hinter der Includedirektive für stdafx.h folgendes ein:

#include "resource.h"
2. Wenn ich mich nun in der PropertyPageklasse CProgramm2Dlg befinde, wie genau sage ich dann dem Pointer auf die Hauptklasse(CProgramm2App *Bezug), dass er sich die Adresse aus der Variable der Datenklasse nehmen soll (CData Daten;) , die in der Hauptklasse deklariert wurde?
Falscher Ansatz. Bringen, nicht holen. Schreib deinen Code von dort aus, wo du die Daten hast, nicht von dort, wo du sie brauchst. Das ist doch offenbar ein Teil aus der InitInstance-Methode der App-Klasse:
	CProgramm2Dlg Dialog1;
CDialog2 Dialog2;

CParent ParentSheet("Test");

ParentSheet.AddPage(&Dialog1);
ParentSheet.AddPage(&Dialog2);

m_pMainWnd = &ParentSheet;
int nResponse = ParentSheet.DoModal();
if (nResponse == IDOK)[/code] Hier erzeugst du die Propertypages, die den Zeiger auf die Instanz der Datenklasse brauchen. Hier ist der richtige Punkt, um anzusetzen:
[code] CProgramm2Dlg Dialog1;
CDialog2 Dialog2;

[b]Dialog1.m_pData = &Daten;
Dialog2.m_pData = &Daten;
// oder wie die Variablen bei dir heißen[/b]

CParent ParentSheet("Test");

ParentSheet.AddPage(&Dialog1);
ParentSheet.AddPage(&Dialog2);

m_pMainWnd = &ParentSheet;
int nResponse = ParentSheet.DoModal();
if (nResponse == IDOK)

Link zu diesem Kommentar
Auf anderen Seiten teilen

ES LÄUFT,

ich danke Dir recht herzlich, Holzkopp, für Dein Engagement und Dein Interesse an meinem Problem. Endlich habe ich eine Lösung für mein Problem und die Art der Lösung hat mein Verständnis stark erweitert.

Wenn mal Votings für Moderatoren stattfinden, sag mir Bescheid, meine Stimme hast Du! :)

PS: Ja das mit dem Dialog ist ein Designfehler, ich war halt nur mit der Dialog-Klasse am vertrautesten und wählte deswegen diese. Kennst Du irgendeine MFC-Standardklasse mit der man meine Datenklasse einfacher erstellen kann?

Gruß und herzlichen Dank

KK

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich danke Dir recht herzlich, Holzkopp,
Ich glaube, ich kann froh sein, dass du meinen Namen zumindest einmal richtig geschrieben hast ;)

Kennst Du irgendeine MFC-Standardklasse mit der man meine Datenklasse einfacher erstellen kann?
Wenn sie nur als Container für die Daten dient, sollte die Klasse eigentlich von gar keiner anderen Klasse abgeleitet sein.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...