void run(string motorname, double speed )
Сообщает компилятору, что motorname
является std::string
. std::string
не имеет spin
метода. На основании
run(LeftFront,80);
, где LeftFront
- это originallib::motor
, и, если originallib::motor
действительно имеет метод spin
, вы действительно функция, похожая на
void run(originallib::motor & motor,
double speed)
{
motor.spin(originallib::directionType::fwd,
speed,
originallib::velocityUnits::pct);
}
так что motor
, который может spin
, предоставляется вместо string
, который может в лучшем случае std::rotate
В качестве альтернативы использованию имен можно использовать карту из string
-> motor
пар ключ-значение, в которой вы можете найти имя двигателя на карте и получить сопоставленный motor
, для которого вы можете вызвать spin
. Здесь это не кажется желательным.
Sidenote:
Вы не хотите
originallib::motor LeftFront=originallib::motor(originallib::PORT2,
originallib::gearSetting::ratio18_1,
true);
в шапке. Это нарушает правила One Definition Rule , если несколько Единиц перевода включают заголовок, так как каждый, включая единицу перевода, будет иметь свой собственный, одинаково действительный, LeftFront
. Включить охрану не помешает этому, потому что включающая защита может предотвратить включение заголовка только несколько раз в одну единицу перевода.