需要帮助将字符串插入函数

时间:2018-08-28 20:30:50

标签: c++ string function

我希望使重复编程变得更容易一些。该程序根据制造商程序指南告诉电机旋转。当前代码将指出:

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 .....是原始库的一部分

我该如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

void run(string motorname, double speed )

告诉编译器motornamestd::stringstd::string没有spin方法。基于

run(LeftFront,80);

其中LeftFrontoriginallib::motor,并且假设originallib::motor确实具有spin方法,那么您的功能看起来确实像

void run(originallib::motor & motor, 
         double speed)
{
    motor.spin(originallib::directionType::fwd, 
               speed, 
               originallib::velocityUnits::pct);
}

以便提供可以使用motor的{​​{1}}而不是可以最多使用std::rotatespin

使用名称的另一种方法是拥有string-> string键值对的映射,您可以在映射中查找电动机名称并接收映射的motor ,您可以在其上调用motor。这似乎不是理想的情况。

侧注:

您不想

spin

在标题中。如果多个One Definition Rule包含标头,则会对Translation Units造成破坏,因为每个包含翻译单元的标头都将拥有自己的同等有效的originallib::motor LeftFront=originallib::motor(originallib::PORT2, originallib::gearSetting::ratio18_1, true); Include guards不会阻止这种情况,因为包含保护只能阻止在一个翻译单元中多次包含标头。

相关问题