【问题标题】:Passing parameters to a method C++将参数传递给方法 C++
【发布时间】:2013-02-08 07:35:01
【问题描述】:

我有 Java 方面的经验,我决定研究 C++。为了做到这一点,我想我会经历一些我之前做过的早期(基本)Java 示例,并将它们转换为 C++。 基本上我有两个类,'main'和'Conversion'

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

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。

【问题讨论】:

  • Conversion.convert前一行是什么?
  • 你应该给我们calculateprint的代码!你没有给我们任何信息。
  • 其实你应该给我们一个最小的、完整的例子。这适用于所有语言,而不仅仅是 C++。
  • 好吧,我对 C++ 了解不多,但我知道编程以及打印和计算代码对此毫无意义。

标签: c++ methods parameters


【解决方案1】:

你不能在这样的类上调用方法。 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++,从外观上看,它只是有点过于 java使用 Conversion.convert
  • @AngryDuck 尽管语法可能看似相似,但语言完全不同。了解引用 const,并记住您几乎不需要输入 new
  • 是的,我知道我以前做过一些 C++,但现在已经是几年前了。我知道我不使用新的,我需要记住销毁我创造的东西。生病调查 const tho 为信息欢呼......
  • @AngryDuck 如果你用newmalloc 创建它们,你只需要记住销毁它们。所以游戏的名称是不必担心这一点。
  • @AngryDuck 最好不要知道!这是一个 C 的东西。
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 2017-01-05
  • 2013-10-04
相关资源
最近更新 更多