Наследование конструктора от конструктора родительского класса в библиотеке
- Войдите на сайт для отправки комментариев
Вс, 23/10/2016 - 22:04
При создании проекта появилась необходимость создания новой библиотеки. При сборе в общем коде все работает правильно, но после разбиения для библиотеки ругается. Помогите правильно объявить конструктор класса, который наследуется от родительского класса. Объединенный код:
struct Vector { public: Vector(){ }; int n;//=1; float *VS; void Init(int an){ n=an; VS=new float [n]; } Vector(int an){ Init(an); } }; void printVector(Vector Vec){ for (int i=0; i<Vec.n; i++) Serial.println(Vec.VS[i]); Serial.println(); }; class AMatModel { public: Vector Vec; AMatModel(int an){ Vec.Init(an); }; virtual Vector RParts(Vector Vec0, double t)=0; // VecK.VS[3] = 1;// дописать получение ускоренний с акселерометра // VecK.VS[4] = 0; // VecK.VS[5] = 0; //printVector(VecK); // return VecK; }; class MatModel : public AMatModel{ public : MatModel(int an):AMatModel(an){ }; Vector RParts (Vector Vec0, double t){ Vector VecK(Vec0.n); VecK.VS[0] = sin(t);//+ return VecK; } };
Вот после разбиения на h файл и cpp:
h-файл:
#ifndef MATH_MATMODEL_H_INCLUDED #define MATH_MATMODEL_H_INCLUDED #include "Arduino.h" struct Vector { public: Vector(); int n; float *VS; void Init(int an); Vector(int an); }; void printVector(Vector Vec); class AMatModel { public: Vector Vec; AMatModel(int an); virtual Vector RParts(Vector Vec0, double t)=0; }; class MatModel : public AMatModel{ public : MatModel(int an):AMatModel(an); Vector RParts (Vector Vec0, double t); }; #endif // MATH_MATMODEL_H_INCLUDED
cpp-файл:
#include "Arduino.h" #include "Math_MatModel.h" void Vector::Init(int an){ n=an; VS=new float [n];}; Vector::Vector(int an){ Init(an); }; void printVector(Vector Vec){ for (int i=0; i<Vec.n; i++) Serial.println(Vec.VS[i]); Serial.println(); }; AMatModel::AMatModel(int an){ Vec.Init(an); }; //virtual Vector AMatModel::RParts(Vector Vec0, double t)=0; MatModel::MatModel(int an):AMatModel(an){ }; Vector MatModel::RParts (Vector Vec0, double t){ Vector VecK(Vec0.n); VecK.VS[0] = sin(t);//+ return VecK; };
Ошибка:
Arduino: 1.6.6 (Windows 10), Плата:"Arduino/Genuino Uno"
In file included from C:\Users\Алекскандр\Documents\Arduino\libraries\Math/Math_Int.h:4:0,
from C:\Users\Алекскандр\Documents\Arduino\Math_full\Math_full.ino:1:
C:\Users\Алекскандр\Documents\Arduino\libraries\Math/Math_MatModel.h: In constructor 'MatModel::MatModel(int)':
C:\Users\Алекскандр\Documents\Arduino\libraries\Math/Math_MatModel.h:22:32: error: expected '{' at end of input
MatModel(int an):AMatModel(an);
^
exit status 1
Ошибка компиляции.
Скорее всего так. http://arduino.ru/forum/programmirovanie/klass-protsessy-i-programma-blink-bottom#comment-209838
У меня же вроде так и написано в общем файле(без разбиения). И да, там все работает. Я не знаю как обьявить этот конструктор в h-файле.
Убрать вызов конструктора AMatModel() из строчки в h-файле:
MatModel(
int
an):AMatModel(an);
, просто поставить там точку с запятой.Спасибо большое. Правда я минуты 3 назад так и сделал)