Florian schrieb:
> "friend" verwendet man so sparsam wie möglich und nur für
> Klassen, die sehr eng mit anderen Klassen bzw. Funktionen
> zusammenarbeiten (aber eben aus verschiedenen Gründen nicht in der
> Klasse selbst implementiert werden sollen).
Etwas wirr.
... (aber die entsprechende Funktionalität eben aus verschiedenen
Gründen - generelles Design, Operandenreihenfolge, ... - nicht in der
Klasse selbst implementiert werden soll oder kann, aber der Zugriff so
effizient wie unter den gegebenen Umständen möglich sein soll). Auch
wenn du einfach nur V3D Zugriff auf i gewähren und ansonsten nicht
zulassen willst, gehören Ape und V3D sehr wahrscheinlich in die gleiche
Bibliothek. Oder dein Vorgehen ist insgesamt nicht passend, aber dazu
müsste man mehr wissen.
BTW: Rein technisch funktioniert es natürlich trotzdem.
ape.h; APEDLL_EXPORTS im DLL-Projekt definieren.
1 | #pragma once
|
2 |
|
3 | #ifdef APEDLL_EXPORTS
|
4 | #define APEDLL_API __declspec(dllexport)
|
5 | #else
|
6 | #define APEDLL_API __declspec(dllimport)
|
7 | #endif
|
8 |
|
9 | class APEDLL_API Ape
|
10 | {
|
11 | public:
|
12 | friend class V3D;
|
13 | private:
|
14 | int i;
|
15 | };
|
client.cpp
1 | #include "ape.h"
|
2 |
|
3 | class V3D
|
4 | {
|
5 | public:
|
6 | void bla(Ape& ape)
|
7 | {
|
8 | ape.i = 99;
|
9 | }
|
10 | };
|
11 |
|
12 | int main()
|
13 | {
|
14 | V3D v3d;
|
15 | Ape ape;
|
16 | v3d.bla(ape);
|
17 |
|
18 | return 0;
|
19 | }
|
Klappt problemlos.