我有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。
最佳答案
您不能在类似的类上调用方法。 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中一个非常特殊的函数的名称,因此您应避免将其用作类名。它不是关键字,但仍然可能造成混淆。关于c++ - 将参数传递给方法C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15028332/