Что вернет указатель на класс
Разбираюсь в уже существующем коде. Так понял, что &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 шт):
Соответственно, я могу догадаться, что происходит преобразование класса в
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
действительно невозможно, и вы сами сказали почему. Но в вашем коде такого преобразования нет.