Fehler beim Zugriff auf von CStatic abgeleiteten Klasse (C2248)
-
Guten Tag
Ich habe von CStatic eine Klasse abgeleitet die dazu verwenden wird diverse Anzeigeaufgaben zu erledigen.
Solange ich die abgeleitete Klasse nur mit den initialisierten Werten verwende, funktioniert alles Fehlerfrei.
Sobald ich aber die von mir erstellten Get-/Set Funktionen verwende, erhalte ich die Fehlermeldung C2248, die besagt, dass ich versuche auf eine protectet Funktion zuzugreife.
Ich habe diese Funktion aber als public deffiniert.
In der gesammten Klasse gibt es kein protectet, sondern nur public für die Funktionen und private für die internen Variablen.
Die Funktion wurde public abgeleitet.
Ich habe beim Erstellen die Basisklasse CStatic angegeben und sonst nichts an der Klasse geändert, außer eine Get- und eine Setfunktion hinzuzufügen und mit OnPaint einen netten Kreis zu zeichnen.Ich verwende VS2003 und Framework 1.1
Kennt jemand eine Lösung für dieses Problem?
-
Zeig doch mal ein bisschen Code.
-
Die Funktion wurde public abgeleitet.
Du kannst keine Funktionen ableiten. Wenn die Methode in der Basisklasse protected ist, kannst du sie nicht in deiner abgeleiteten Klasse als public definieren ... falls du das damit gemeint hast.
Und wenn die Basisklassen-Methode protected ist, kannst du sie nicht in deiner abgeleiteten Klasse verwenden ... sonst hätte das mit der Datenkapselung ja alles keinen Sinn, wenn man einfach eine Klasse ableiten müsste, um an die gesicherten Member ran zu kommen.
-
Guten Tag.
Entschuldigung dass ich den Quellcodeabschnitt erst jetzt liefere aber ich konnte als ich die Nachricht erstellt hatte nicht an meinen Programmier-PC.
Hier ist der Quellcode:
mystatic.h
#pragma once #include "afxwin.h" class CMyStatic : public CStatic { public: CMyStatic(void); ~CMyStatic(void); DECLARE_MESSAGE_MAP() BOOL SetData(unsigned int uiVal); afx_msg void OnPaint(); private: unsigned int m_uiVal; };mystatic.cpp
#include "StdAfx.h" #include ".\mystatic.h" CMyStatic::CMyStatic(void) { m_uiVal = 0; } CMyStatic::~CMyStatic(void) { } BEGIN_MESSAGE_MAP(CMyStatic, CStatic) ON_WM_PAINT() END_MESSAGE_MAP() void CMyStatic::OnPaint() { CPaintDC dc(this); CRect cRect; GetWindowRect(&cRect); ScreenToClient(&cRect); cRect.DeflateRect(3,3); dc.Rectangle( cRect.left, cRect.top, cRect.right, cRect.bottom); dc.Arc( cRect, CPoint(cRect.left+15,(cRect.top+(cRect.bottom-cRect.top)/2)), CPoint(cRect.left+15,(cRect.top+(cRect.bottom-cRect.top)/2))); } BOOL CMyStatic::SetData(unsigned int uiVal) { m_uiVal = uiVal; return TRUE; }Die Klasse ich SetData im Projekt aufgerufen wird, bekomme ich den oben genannten Fehler.
Das Anzeigeelement habe ich erstellt indem ich ein CStatic Bildelement im Dialog-Editor hinzugefügt habe, und ihm die Klasse CMyStatic zugewiesen habe.
-
Das "protected" steckt in DECLARE_MESSAGE_MAP(), setze das DECLARE_MESSAGE_MAP() mal hinter das SetData()!!!!
BOOL SetData(unsigned int uiVal); DECLARE_MESSAGE_MAP()
-
Genau dass war der Fehler.
Danke vielmals für deine Hilfe.
mfg Sepp
-
Kein Problem, dafür sind wir hier!!
