【问题标题】:Need help inserting a string into a function需要帮助将字符串插入函数
【发布时间】:2018-08-28 20:30:50
【问题描述】:

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

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

我该如何实现这一目标?

【问题讨论】:

  • void run(string motorname, double speed ) 告诉编译器motornamestd::string,而不是它应该是的任何类。你想要void run(SomeClassHere motorname, double speed )
  • LeftFront和RightFront的类型是什么?
  • 这是它们在标题中的定义方式:originallib::motor LeftFront=originallib::motor(originallib::PORT2,originallib::gearSetting::ratio18_1,true);

标签: c++ string function


【解决方案1】:
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);
}

以便提供可以spinmotor,而不是最多可以std::rotatestring

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

旁注:

你不想

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

在标题中。如果多个Translation Units 包含标题,这将对One Definition Rule 造成严重破坏,因为每个包含翻译单元都有自己的、同样有效的LeftFrontInclude guards 不会阻止这一点,因为包含保护只能防止标题在一个翻译单元中被多次包含。

【讨论】: