我有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。
答案 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中一个非常特殊的函数的名称,因此您应该避免将它用于类名。它不是一个关键字,但它可能会令人困惑。