首页 > 解决方案 > 需要帮助将字符串插入函数

问题描述

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

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..... 是 originallib 的一部分

我怎样才能实现这一目标?

标签: c++stringfunction

解决方案


void run(string motorname, double speed )

告诉编译器这motorname是一个std::string. std::string没有spin办法。基于

run(LeftFront,80);

哪里LeftFront是 a originallib::motor,假设originallib::motor确实有一个spin方法,你真的是看起来像的函数

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

以便提供一个motorthat canspin而不是一个stringthat can 充其量std::rotate

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

边注:

你不想

originallib::motor LeftFront=originallib::motor(originallib::PORT2,
                                                originallib::gearSetting::ratio18_1,
                                                true);

在标题中。如果多个翻译单元包含标题,这会对单一定义规则造成严重破坏,因为每个包含翻译单元都有自己的、同样有效的. 包含守卫不会阻止这种情况,因为包含守卫只能防止标头在一个翻译单元中多次包含。LeftFront


推荐阅读