ошибка: невозможно получить доступ к закрытому члену, объявленному в классе: с помощью тестового друга - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть класс, объявленный в AirportDBAccessor.h, например:

class AirportDBAccessor 
{
private:
EDS::uint8_t   *pAptData;       
EDS::sint32_t     namesStartLoc;
EDS::bool_t   AirportTextDbInitialized;

// Airport Data
// apt_dir.dat file ptr
const EDS::char8_t    *AptIdxRecFilePtr;
const EDS::char8_t    *AptDataFilePtr;
// apt_dat.dat file ptr
const EDS::char8_t    *AptDatFilePtr;
EDS::uint32_t         TempDirNumRec;
EDS::uint32_t         AirportDatFileSize;
EDS::sint32_t         AirportTextDbNumRecords;
EDS::uint32_t        MaxValidAirportDatIndex;

EDS::sint32_t AptDirLoc;
EDS::sint32_t AptDataLoc;
EDS::uint32_t GetAirportIndexRec(EDS::sint32_t index);
EDS::sint32_t AptIndexBinarySearch(const EDS::char8_t *icao, 
stAirportIndexRecord *AptIdxRec);

public:
AirportDBAccessor();
~AirportDBAccessor();

void InitializeAirportTextDB(EDS::sint32_t dBError);
EDS::uint8_t GetCityStateName (const EDS::char8_t *icao, EDS::char8_t 
*CityName, EDS::char8_t *StateName);
void GetRunwayRecord (const EDS::char8_t *icao, const EDS::char8_t 
*RunwayName, 
EDS::sint32_t *WhichEnd, stRunwayIndexRecord *TempRwyRec);
void GetRwyNotes(EDS::char8_t* RwyNotes, EDS::uint16_t 
RunwayNoteStringLength, 
EDS::uint32_t RunwayNoteIndex , EDS::uint16_t MAX_LEN);
void GetAirportRecord (const EDS::char8_t *icao, stAirportIndexRecord 
*TempRec);
void GetAirportFullName(EDS::char8_t* AirportName, EDS::uint32_t 
AirportNameIndex, EDS::uint8_t AirportNameLength);
void GetDataByIndex(EDS::uint32_t FileIndex, EDS::uint8_t DataLength, 
EDS::char8_t* DataPtr);
void GetAirportHotelsRecord (EDS::uint32_t FileIndex, EDS::uint32_t 
WhichHotel, 
stAptHotelsRecord *TempRec);
void GetAirportGndTransRecord (EDS::uint32_t FileIndex, EDS::uint32_t 
WhichGndTrans, stAptGndTransRecord *TempRec);

};

Теперь я хочу получить доступ к закрытой функции-члену GetAirportIndexRec ().Для этого я определил user_defined.h как показано ниже:

#define protected friend class Test_Friend; protected
#define private friend class Test_Friend; private
#include "AirportDbAccessor.h"
#undef protected
#undef private

class Test_Friend
{
 public:
 //Constructor
 Test_Friend::Test_Friend()
 {

 }

 //Accessing private Member function using friend class concept
 unsigned long  get_GetAirportIndexRec(AirportDBAccessor& 
 AirportDBAccessor_1)
 {
  unsigned long index = 0;
  unsigned long GetAirportIndexRec_index = 0;
  GetAirportIndexRec_index = AirportDBAccessor_1.GetAirportIndexRec(index);
  return GetAirportIndexRec_index;
 }
};

И в main () я звоню как показано ниже:

Void main()
{
EDS::uint32_t            Output_index;
AirportDBAccessor AirportDBAccessor_1;
Test_Friend Test_Friend_1;

Output_index = Test_Friend_1.get_GetAirportIndexRec(AirportDBAccessor_1); 
}

Но я получаю ошибку в user_defined.h как'GetAirportIndexRec': не может получить доступ к приватному члену, объявленному в классе 'AirportDBAccessor'.

Может ли кто-нибудь помочь мне в этом?

...