将参数传递给方法C ++

时间:2013-02-22 16:06:55

标签: c++ methods parameters

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

转换会将英制测量转换为公斤。

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

对于下面的方法调用,

missing ';' before ','(unit1和unit 2是双变量) 然后其他两个是字符串

   Conversion.convert(unit1, unit2, sUnit1, sUnit2);

这应该在转换时将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);
}

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

1 个答案:

答案 0 :(得分:10)

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

Conversion::convert(unit1, unit2, sUnit1, sUnit2);

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

Conversion c;
c.convert(unit1, unit2, sUnit1, sUnit2);

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

namespace Conversions
{
   void convert(double d1, double d2, std::string s1, std::string s2) { ... }
}

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

Conversions::convert(unit1, unit2, sUnit1, sUnit2);

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

void convert(double d1, double d2, const std::string& s1, const std::string& s2);

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

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