#c #class #casting
#c #класс #Кастинг
Вопрос:
Я новичок в C , и у меня проблема с классами.
Я получил этот прототип
class MMA7455 : public Accel
{
public:
MMA7455(uint8_t);
uint8_t accel_get_data(acceleration_t*);
private:
uint8_t accel_data_ready(void);
};
и я хочу создать его экземпляр
MMA7455 accel = MMA7455(0x21);
но появляется следующее сообщение
In function `global constructors keyed to accel':
sensors.cpp:(.text 0x8): undefined reference to `MMA7455::MMA7455(unsigned char)'
Почему он ищет аргумент ‘unsigned char’? То же сообщение, даже если я пытаюсь неявно привести тип константы
MMA7455 accel = MMA7455((uint8_t)0x21);
Комментарии:
1. Верно, проблема была в неправильных настройках компоновщика
Ответ №1:
Вероятно, вы не связали свой cpp-файл, содержащий определение конструктора. «uint8_t» является определением типа для ‘unsigned char».
Ответ №2:
Вам нужно определить MMA7455::MMA7455(uint8_t)
где-нибудь в вашей программе, т.Е. добавить {}
-body после определения в прототипе (или, возможно, вы просто забыли скомпилировать и связать cpp-файл, содержащий определения для MMA7455
.
Он ищет, unsigned char
потому что uint8_t
в вашей системе есть typedef
for unsigned char
.
Комментарии:
1. Я определил это как
MMA7455::MMA7455(uint8_t i2cAddress) { this->m_Address = i2cAddress; }
Ответ №3:
uint8_t
является определением типа для unsigned char
на вашей платформе. Ошибка является ошибкой компоновщика, поскольку вы не предоставили реализацию для своего конструктора и не связана с аргументом, являющимся unsigned char
или нет.
Комментарии:
1. Я определил это как
MMA7455::MMA7455(uint8_t i2cAddress) { this->m_Address = i2cAddress; }
2. @marvin: Вы правильно связываете этот файл?