Forum: Compiler & IDEs Anzeige privater Klassenmember in Atmel Studio 7


von Markus H. (markush17)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich programmiere in Atmel Studio 7 einen Controllino (Arduino).
Dazu habe ich mehrere Klassen in C++ erstellt, die in main referenziert 
werden.
Wenn ich nun eine Methode/Funktion der referenzierten Klasse aufrufen 
will, dann werden mir aber auch die privaten Klassenmember angezeigt.
Ist das normaes Verhalten von Atmel Studio?
Ich muss dazu sagen, dass ich das erste mal jetzt mit Atmel Studio und 
C++ arbeite.

Ein Codeauszug:
1
/* 
2
* HeatingController.h
3
*
4
* Created: 03.02.2017 20:07:04
5
*/
6
7
8
#ifndef __HEATINGCONTROLLER_H__
9
#define __HEATINGCONTROLLER_H__
10
11
#include <Controllino.h>
12
#include <Arduino.h>
13
14
class HeatingController
15
{
16
//variables
17
public:
18
protected:
19
private:
20
  float ambientTemperature;
21
22
//functions
23
public:
24
  HeatingController();
25
  ~HeatingController();
26
  void ReadAllTemperatures();
27
  float GetAmbientTemperature();
28
protected:
29
private:
30
  HeatingController( const HeatingController &c );
31
  HeatingController& operator=( const HeatingController &c );
32
}; //HeatingController
33
34
#endif //__HEATINGCONTROLLER_H__
1
/*
2
 * HomeController.cpp
3
 *
4
 * Created: 31.01.2017 19:07:41
5
  */ 
6
7
#include "HeatingController.h"
8
9
int main(void)
10
{
11
  // important for initialisation of some functions, e.g. delay
12
  // undocumented in Arduino help files
13
  init();
14
15
  HeatingController* controller = new HeatingController();
16
17
    while (1) 
18
    {
19
    controller->ReadAllTemperatures();
20
    }
21
    
22
    return 0;
23
}

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Markus H. schrieb:
> dann werden mir aber auch die privaten Klassenmember angezeigt.

Und sie werden durch das kleine Symbol als solche gekennzeichnet.
Das Verhalten dürfte also so vorgesehen sein.

von Markus H. (markush17)


Lesenswert?

Nur noch zur Ergänzung.
Ich programmiere auch C# unter Visual Studio.
Da werden in der Intellisense nur die Member angezeigt, die mit der 
entsprechenden Zugriffsberechtigung versehen sind.

Da Atmel Studio auf Visual Studio basiert, irritiert mich das Verhalten 
nun etwas.
Denn es dürften nach meinem Verständnis die privaten Member gar nicht 
angezeigt werden und ich bin mir nicht ganz sicher, ob ich mit der 
Implementierung der Klassen Schuld daran habe.

@Moderatoren: Bitte den Thread nach Compiler & IDE verschieben. Habe das 
falsche Forum erwischt.

von Jim M. (turboj)


Lesenswert?

Markus H. schrieb:
> Ich programmiere auch C# unter Visual Studio.
> Da werden in der Intellisense nur die Member angezeigt, die mit der
> entsprechenden Zugriffsberechtigung versehen sind.

Versuch dasselbe mal mit C++ unter VS.

Eventuell zeigt das dasselbe Verhalten wie Atmel Studio, denn in C++ 
gibt es ja die friend class. Da müsste man dann viel mehr parsen um 
festzustellen ob private erlaubt ist oder nicht.

von Kaj (Gast)


Lesenswert?

Ich koennte mir aber vorstellen, dass die privaten Member (der 
einfachheit halber) immer angezeigt werden, da die IDE sonst den Kontext 
erfassen muesste, in den man gerade schreibt.
Implementiere ich eine Klasse will ich natuerlich schon die privaten 
Member vorgeschlagen bekommen, innerhalb der Klasse ist das ja auch kein 
Problem. Immer ausblenden waere also auch falsch.

Info:
QtCreator zeigt mir auch die privaten Member an, sind aber auch mit 
einem kleinen Schloss markiert.

von Bernd K. (prof7bit)


Lesenswert?

Kaj schrieb:
> da die IDE sonst den Kontext
> erfassen muesste, in den man gerade schreibt.

Das halte ich im Jahre 2017 für eine Selbstverständlichkeit bei einer 
IDE für statisch getypte Sprachen. Tiefer sollte die Messlatte nicht 
liegen.

von Markus H. (markush17)


Lesenswert?

Jim M. schrieb:
> Versuch dasselbe mal mit C++ unter VS.
>
> Eventuell zeigt das dasselbe Verhalten wie Atmel Studio, denn in C++
> gibt es ja die friend class. Da müsste man dann viel mehr parsen um
> festzustellen ob private erlaubt ist oder nicht.

Ich habe mir jetzt in Visual Studio 2015 C++ nachinstalliert.
Und es werden nur die Klassenmember mit den entsprechenden 
Zugriffsrechten angezeigt. Also außerhalb der Klasse werden keine 
privaten Member in Intellisense angezeigt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.