Du bist nicht angemeldet.

Werbeanzeige

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

1

10.06.2013, 20:02

[C++] Keinen Zugriff auf Pointer als Membervariable

Abend zusammen.

Ich arbeite mich gerade durch ein DirectX11 Buch für Anfänger und bin dabei leider auf folgendes Problem gestoßen:
Im Buch wird beschrieben, dass man bestimmte Objekte(ID3D11Device, ID3D11DeviceContext usw.) zu einer Klasse zusammen fassen soll, um diese dann bequemer zu steuern.
Als ich nun gerade dabei war, einen Vertexbuffer mit unten stehendem Code zu erzeugen, unterringelte mir Visual C++ meine Membervariable namens d3dDevice_ und bemängelte, dass er auf diese Membervariable keinen Zugriff hätte. Doch d3dDevice_ ist als protected deklariert, weswegen ich die Fehlermeldung nicht nachvollziehen kann.

Betreffende Codezeile: HRESULT result = demo->d3dDevice_->CreateBuffer(&vertexDesc, &resourceData, &vertexBuffer);

Der Compiler meint folgendes dazu:
main.cpp(83): error C2371: 'result': Neudefinition; unterschiedliche Basistypen
main.cpp(54): Siehe Deklaration von 'result'
main.cpp(83): error C2248: "DX11DemoBase::d3dDevice_": Kein Zugriff auf protected Member, dessen Deklaration in der DX11DemoBase-Klasse erfolgte.
dx11demobase.h(33): Siehe Deklaration von 'DX11DemoBase::d3dDevice_'
dx11demobase.h(11): Siehe Deklaration von 'DX11DemoBase'

Hier noch fix die Dateien für besseren Überblick.


MfG XoR :)

Sylence

Community-Fossil

Beiträge: 1 681

Beruf: Softwareentwickler

  • Private Nachricht senden

2

10.06.2013, 20:10

Du solltest dir noch mal angucken was genau protected heißt ;)
Von außer hast du auf protected variablen genau so wenig Zugriff wie auf private variablen.
Software documentation is like sex. If it's good you want more, if it's bad it's better than nothing.

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

3

10.06.2013, 20:18

Dachte, dass protected in Java die gleiche Sichtbarkeit hat, wie in C++. Wenn ich d3dContext_ allerdings als public deklariere, habe ich immernoch keinen Zugriff darauf...

patrick246

Treue Seele

Beiträge: 329

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

4

10.06.2013, 20:24

Du kannst auf ein protected member nur von geerbten Klassen zugreifen. Ist da in Java etwas anders? Außerdem hast du zweimal eine Variable definiert, allerdings mit jeweils einem anderen Typ, in Zeile 54 und 83. Deshalb kompilert er überhaupt nicht.

Sylence

Community-Fossil

Beiträge: 1 681

Beruf: Softwareentwickler

  • Private Nachricht senden

5

10.06.2013, 20:25

Nein das ist in Java genau so.
Software documentation is like sex. If it's good you want more, if it's bad it's better than nothing.

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

6

10.06.2013, 20:31

Doch, in Java kann man von Außen auf mit protected deklarierte Variablen zugreifen.
Das mit der Variable, die ich zwei mal definiert habe, hatte ich inzwischen auch entdeckt und behoben.
Doch der ursprüngliche Fehler bleibt immernoch bestehen, auch wenn ich d3dDevice_ als public deklariere.

[EDIT]

"protected
Ein Attribut (beispielsweise), das wir mit dem Sichtbarkeitsattribut
protected versehen, kann innerhalb des gesamten Projektes (Paketes)
verwendet werden
, in der sie definiert ist. Insbesondere wichtig ist das
bei Attributen, auf die erbende Klassen direkt zugreifen müssen."
Quelle: http://www.hh.schule.de/heisgy/JAVA-Grun…chtbarkeit.html

BlueCobold

Community-Fossil

Beiträge: 10 890

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

10.06.2013, 20:56

Das ist schlicht falsch, denn Projekt != Paket

Zur Verdeutlichung:

Zitat von »http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default-protected-and-private«


Quellcode

1
2
3
4
5
6
7
8
9
Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  ✔    |    ✔    |    ✔     |   ✔
————————————+———————+—————————+——————————+———————
protected   |  ✔    |    ✔    |    ✔     |   ✘
————————————+———————+—————————+——————————+———————
no modifier |  ✔    |    ✔    |    ✘     |   ✘
————————————+———————+—————————+——————————+———————
private     |  ✔    |    ✘    |    ✘     |   ✘
Immerhin war richtig, dass "protected" in Java mehr Zugriffe erlaubt als in C++ oder C#.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

8

10.06.2013, 21:03

Naja in Java ist ja meistens Paket = Projekt, zumindest wars bei mir noch nie anders. Eigentlich auch egal, denn mich interessiert noch immer, warum ich immernoch keinen Zugriff darauf habe, selbst wenn ich die Membervariable public mache.

Gruß.

BlueCobold

Community-Fossil

Beiträge: 10 890

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

10.06.2013, 21:15

Sorry, aber dann hast Du bisher maximal Schulprojekte erledigt. Ein einzelnes Package ohne Unter-Packages ist schon arg wenig. Wir haben auf Arbeit eine Anzahl Packages irgendwo im 3- bis 4-stelligen Bereich. Allein in einem einzigen Projekt. Im gesamten Produkt auf jeden Fall 4-stellig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

10

10.06.2013, 21:23

Joap, war bisher nur ne kleine Android-App :)
Würde aber gern von der Diskussion weg (gebe mich geschlagen :P) und erfahren, warum ich immernoch keinen Zugriff auf meine Membervariable habe^^.

Gruß XoR.

Werbeanzeige