PPatrickFfm
Grünschnabel
Hallo!
Die Frage ist vielleicht ein bißchen blöd, aber welche Zugriffsrechte haben friend-Funktionen zu einer Klasse X?
Ich dachte (bisher), sowohl auf private als auch als protected deklarierte Elemente von X. Dem scheint aber offenbar nicht so zu sein, oder?!
Mein aktuelles Bsp. dazu sieht so aus:
Header
Implementierung
Ich hatte vor über die Funktion int AT_Commands (Com_Port *p) auf die Lese respektive Schreibfunktionen zu zugreifen, Probleme bereitet aber der HANDLE. Alle jetzt als private: deklarierten Elemente waren vorher protected:, ist eigentlich auch nicht weiter schlimm. Ich wollte halt nur wissen, WIESO damit kein Zugriff möglich ist.
Ich bin mir eigentlich sicher, dass dieselben Rechte wie für private: gelten. Aber warum gehts dann nicht?!
Danke schonmal für die Antwort!
MFG
Die Frage ist vielleicht ein bißchen blöd, aber welche Zugriffsrechte haben friend-Funktionen zu einer Klasse X?
Ich dachte (bisher), sowohl auf private als auch als protected deklarierte Elemente von X. Dem scheint aber offenbar nicht so zu sein, oder?!
Mein aktuelles Bsp. dazu sieht so aus:
Header
Code:
class Com_Port
{
public:
char Command_Data[20];
char Msg_Data[20];
DWORD BytesRead;
HANDLE ComHandle;
HANDLE Open_Comport (DWORD Comport);
int Config_ComPort (HANDLE DriverHandle, DWORD BaudRate);
int Write_Comport (HANDLE DriverHandle);
int Read_Comport (HANDLE DriverHandle);
int Close_Comport (HANDLE DriverHandle);
int Init_ELM (void);
int Get_Error(void);
friend AT_Commands (Com_Port *p);
Com_Port();
virtual ~Com_Port();
private:
char Com_Name[4];
char szBuf;
static unsigned int Port_No;
DWORD DCB_Baud_Rate, Com_Errors;
DCB ELM_DCB;
HANDLE DriverHandle;
};
Implementierung
Code:
#include "Com_Handle.h"
unsigned char CRC(void);
int CreateMsg_Data (char *Msg_Data);
int Com_Port :: Init_ELM (void)
{
cout << "Searching ComPort, please wait. \n\n";
do
{
Port_No ++;
DriverHandle = Open_Comport (Port_No);
}
while(!DriverHandle && Port_No != 5);
if (!DriverHandle)
{
cout << "Unable to open port" << endl;
return 0;
}
cout << "Connected on " << Com_Name << endl;
Config_ComPort(DriverHandle, 9600);
ComHandle = DriverHandle; //ComHandle rausschmeißen!
AT_Commands (this);
return 0;
}
int AT_Commands (Com_Port *p)
{
strcpy(p->Command_Data, "atz\r");
if (!p->DriverHandle)
{
cout << "Error" << endl;
return 0;
}
cout << "Performing System Reset . . ." << endl;
while(p->Command_Data[0] == 'a')
{
p->Write_Comport (p->DriverHandle);
cout << "Enter AT_Command: ";
cin >> p->Command_Data;
if(p->Command_Data[0] != 'a')
break;
strcat(p->Command_Data, "\r");
}
return 0;
}
int CreateMsg_Data(char *Msg_Data)
{
int i = toascii(Msg_Data[0]); //im Folgenden nur Datenfeld erzeugen
int j = 0;
for(i; i>=0;i--)
{
Msg_Data[j] = Msg_Data[j+1];
j++;
if(i==0)
Msg_Data[j] = '\0';
}//Datenfeld mit Raw-Daten des Bus
return 0;
}
unsigned char CRC(void) //Berechne Checksumme
{
unsigned char msg_buf[20], nBytes=0;
unsigned char CRC_Reg=0xFF;
unsigned char poly,i,j;
unsigned char *Byte_point, Bit_point;
for (i=0, Byte_point=msg_buf; i<nBytes; i++, Byte_point++)
{
for (j=0, Bit_point=0x80 ; j<8; j++, Bit_point>>=1)
{
if (Bit_point & *Byte_point)
{
if (CRC_Reg & 0x80)
poly=1;
else
poly=0x1C;
CRC_Reg= ( (CRC_Reg << 1) | 1)^poly;
}
else
{
poly=0;
if (CRC_Reg & 0x80)
poly=0x1D;
CRC_Reg= (CRC_Reg << 1)^poly;
}
}
}
return ~CRC_Reg; //Komplement zurückgeben
}
Ich hatte vor über die Funktion int AT_Commands (Com_Port *p) auf die Lese respektive Schreibfunktionen zu zugreifen, Probleme bereitet aber der HANDLE. Alle jetzt als private: deklarierten Elemente waren vorher protected:, ist eigentlich auch nicht weiter schlimm. Ich wollte halt nur wissen, WIESO damit kein Zugriff möglich ist.
Ich bin mir eigentlich sicher, dass dieselben Rechte wie für private: gelten. Aber warum gehts dann nicht?!
Danke schonmal für die Antwort!
MFG