将参数传递给方法C++

Ang*_*uck 0 c++ parameters methods

我有java的经验,我决定看看C++.为此,我想我会经历一些我以前做过的早期(基本)Java示例,并将它们转换为C++.基本上我有两个班,'主'和'转换'

转换将英制测量值转换为千克.

main获取用户输入.我正在尝试做的是将2个double值和两个字符串从main传递给转换中的方法convert但是我得到了错误

missing ';' before ',' 对于下面的方法调用(unit1和unit 2是双变量),然后其他两个是字符串

   Conversion.convert(unit1, unit2, sUnit1, sUnit2);
Run Code Online (Sandbox Code Playgroud)

这应该在转换中将4个参数发送给此方法.

void convert(double unit1, double unit2, std::string sUnit1, std::string sUnit2)
{
    double result1 = calculate(unit1, sUnit1);
    double result2 = calculate(unit2, sUnit2);
    print(result1+result2);
}
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会抛出错误?还要说如果你需要更多的代码,我相信这是非常明显的,但也许你可以从我的代码中看到我更习惯于Java.

jua*_*nza 10

你不能在这样的类上调用方法.要么convert是静态方法,在这种情况下,您可以这样调用它:

Conversion::convert(unit1, unit2, sUnit1, sUnit2);
Run Code Online (Sandbox Code Playgroud)

或者它是一个成员函数,在这种情况下,您需要在以下实例上调用它Conversion:

Conversion c;
c.convert(unit1, unit2, sUnit1, sUnit2);
Run Code Online (Sandbox Code Playgroud)

请注意,与Java不同,在C++中,您可以使用"自由"功能,即您不必将它们放在类中.这些情况下的常见做法是将函数放在命名空间中:

namespace Conversions
{
   void convert(double d1, double d2, std::string s1, std::string s2) { ... }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以类似于静态方法案例调用它:

Conversions::convert(unit1, unit2, sUnit1, sUnit2);
Run Code Online (Sandbox Code Playgroud)

另请注意,除非您要复制std::strings正在传递给函数的副本,否则最好通过const引用来避免不必要的副本:

void convert(double d1, double d2, const std::string& s1, const std::string& s2);
Run Code Online (Sandbox Code Playgroud)

这同样适用于双打,你可以通过const引用传递它们,但考虑到潜在复制double的成本,它几乎不值得.

最后,main是C++和C中一个非常特殊的函数的名称,所以你应该避免将它用于类名.它不是关键字,但它可能会令人困惑.

  • @AngryDuck最好不要知道!这是一件C事. (2认同)