Что вернет указатель на класс

Разбираюсь в уже существующем коде. Так понял, что &time - это адрес класса Time. Если закомментировать unsigned long time , то выскакивает ошибка

no suitable conversion function from "Time" to "unsigned long" exists.

Соответственно, я могу догадаться, что происходит преобразование класса в unsigned long. Но что именно там может преобразовываться, если класс содержит в себе несколько переменных и пару функций. Возможно вопрос глупый, но объясните, пожалуйста, как чайнику, либо дайте ссылку на литературу по этому поводу желательно адекватного объема.

class Time {

private:
unsigned char sec;
unsigned char min;
unsigned char hour;
unsigned char ...

public:
char data_bufer[7];
char fl_read+end;
char fl_read;
unsigned char long_date;

void init(void);
void read(void);
void...
unsigned char in_BCD_format(unsigned char data);

};

External_bus {

void FRam_Read_long (unsigned long, void*);

};

extern Time time;
extern External_bus ext_buss;

void External_Bus::Flash_Read_long(unsigned char Adr, void* ptr){

unsigned char* Adr_byte;
Adr_byte = (unsigned char*)ptr;
somefunction(Adr, *Adr_byte)

}
 
void main_func{

unsigned char current_oscill;
unsigned long time;
unsigned long event;
line_counter = 0;

if (something){
current_oscill = variable;
while(condition){
ext_buss.Flash_Read_long(current_oscill, &time);  //по сути сюда приходит какое-то значение, но что именно?
}
}

}

Ответы (1 шт):

Автор решения: maestro

Соответственно, я могу догадаться, что происходит преобразование класса в unsigned long

Нет, преобразования класса в unsigned long здесь нет. У вас есть две отдельные переменные с одинаковым именем и с разной областью видимости. Первая:

extern Time time;

Эта запись показывает, что где-то в другой единице трансляции (файле) объявлена и определена переменная time типа Time. Объявление сделано в глобальной области видимости приведённого вами файла.

Вторая:

unsigned long time;

это ещё одна переменная time, которая имеет тип unsigned long, и никакого отношения к переменной Time time не имеет. Переменная объявлена локально, внутри функции main_func. Любое упоминание слова time внутри этой функции относится именно к локальной переменной. Если закомментировать unsigned long time, то внутри функции main_func становится видима переменная Time time.

Далее. Текст ошибки, который вы привели, к этому коду отношения не имеет, так как в соответствии с

void External_Bus::Flash_Read_long(unsigned char Adr, void* ptr)

функция Flash_Read_long принимает вторым параметром указатель на void, а к этому типу может быть преобразован любой указатель: хоть unsigned long*, хоть Time*.

Преобразовать Time в unsigned long действительно невозможно, и вы сами сказали почему. Но в вашем коде такого преобразования нет.

→ Ссылка