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中一个非常特殊的函数的名称,所以你应该避免将它用于类名.它不是关键字,但它可能会令人困惑.
归档时间: |
|
查看次数: |
364 次 |
最近记录: |