我希望使重复编程变得更容易一些。该程序根据制造商程序指南告诉电机旋转。当前代码将指出:
motorname.spin(originallib::directionType::fwd, speed, originallib::velocityUnits::pct);
我想说:
int main()
{
run(LeftFront,80);
run(RightFront,80);
}
void run(string motorname, double speed )
{
motorname.spin(originallib::directionType::fwd, speed, originallib::velocityUnits::pct);
}
LeftFront和RightFront在先前的头文件中已声明为
originallib::motor LeftFront=originallib::motor(originallib::PORT2,
originallib::gearSetting::ratio18_1,
true);
我遇到的问题是:
“错误:'std :: basic_string'中没有名为'spin'的成员”
因为motorname.spin
.....是原始库的一部分
我该如何实现这一目标?
答案 0 :(得分:0)
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
的{{1}}而不是可以最多使用std::rotate
的spin
使用名称的另一种方法是拥有string
-> string
键值对的映射,您可以在映射中查找电动机名称并接收映射的motor
,您可以在其上调用motor
。这似乎不是理想的情况。
您不想
spin
在标题中。如果多个One Definition Rule包含标头,则会对Translation Units造成破坏,因为每个包含翻译单元的标头都将拥有自己的同等有效的originallib::motor LeftFront=originallib::motor(originallib::PORT2,
originallib::gearSetting::ratio18_1,
true);
。 Include guards不会阻止这种情况,因为包含保护只能阻止在一个翻译单元中多次包含标头。