0

私は Java の経験があり、C++ を検討することにしました。これを行うには、以前に行った初期の (基本的な) Java の例をいくつか見て、それらを C++ に変換すると考えました。基本的に、「メイン」と「変換」の 2 つのクラスがあります。

変換は、帝国単位をキロに変換します。

main はユーザー入力を取得します。私がやろうとしているのは、2つのdouble値と2つの文字列をメインからメソッドに変換して渡すことですconvertが、エラーが発生します

missing ';' before ','以下のメソッド呼び出し ( unit1 と unit 2 は double 変数) の場合、他の 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);

同じことが double にも当てはまり、const 参照で渡すことができますが、double をコピーする可能性があることを考えると、ほとんど価値がありません。

最後に、mainは C++ および C の非常に特殊な関数の名前であるため、クラス名には使用しないでください。これはキーワードではありませんが、混乱を招く可能性があります。

于 2013-02-22T16:11:15.940 に答える