0

我有java经验,我决定看看C++。为此,我想我会浏览一些我之前做过的早期(基本)Java 示例,并将它们转换为 C++。基本上我有两个类,“主要”和“转换”

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

main 获取用户输入。我正在尝试做的是将 2 个双精度值和两个字符串从 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。

4

1 回答 1

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 中一个非常特殊的函数的名称,所以你应该避免使用它作为类名。它不是关键字,但它可能会令人困惑。

于 2013-02-22T16:11:15.940 回答