2017-09-08 9 views
0

JavaクラスをC++に変換しようとしていますが、オブジェクトに関するエラーやポインタの誤解の可能性があります。次のようにJavaメソッドは次のとおりです。JavaをC++に翻訳する:誤解ポインタ

public SimpleDate daysFromNow(int n) throws IllegalArgumentException { 
    if (n == 0) { 
     return new SimpleDate(month,day,year); 
    } 

    SimpleDate date; 

    if (n < 0) { 
     throw new IllegalArgumentException ("n can't be negative"); 
    } else { 
     date = nextDate(); 
     for (int i = 1; i < n; i++) { 
      date = date.nextDate(); 
     } 
    } 

    if (date.getYear() < MIN_YEAR) 
     throw new IllegalArgumentException("Resulting date is before " 
       + "1/1/1753"); 

    return date; 
} 

これは私がしかし、これは明らかにあなたがnullのオブジェクトをインスタンス化することはできません++なぜならCには動作しませんC++

SimpleDate SimpleDate::daysFromNow(int n) { 
if (n == 0) { 
    return SimpleDate(getMonth(), getDay(), getYear()); 
} 
SimpleDate date; 

if(n < 0){ 
    throw std::invalid_argument("n can't be negative"); 
} 
else { 
    date = nextDate(); 
    for(int i = 1; i<n;i++){ 
     date = date.nextDate(); 
    } 
} 

if(date.getYear() < MIN_YEAR){ 
    throw std::invalid_argument("Resulting date is before 1/1/1753"); 
    return date; 
} 

} 

にそれを翻訳してきた方法です。私はこのコードをJavaから正しく翻訳する方法について、誰かが正しい方向を教えてくれますか?ありがとうございました。

編集:SimpleDateコンストラクターに3つの引数が必要なため、エラーは発生しません。コンパイルできません。私は後に()を追加する場合は、オブジェクトのインスタンス化ライン上のエラーが表示されなくなりますが、その後私が言うとき:

+0

何が結果になりましたか? – muasif80

+0

何か問題がありますか?説明にそのエラーを追加してください。 – muasif80

答えて

0

「『)(SimpleDate』の代わりに必要な構造タイプ」:

date = date.nextDate(); 

私はエラーを取得しますまず第一に、あなたの翻訳の誤りがあります(例外はC++でスロー状態ならば、あなたが同じでreturn文を入れて)、あなたはどちらかJavaやC++で空のオブジェクトを作成する必要はありません。

if(n < 0) 
    throw std::invalid_argument("n can't be negative"); 

SimpleDate date = nextDate(); 

for(int i = 1; i<n;i++) 
    date = date.nextDate(); 

if(date.getYear() < MIN_YEAR) 
    throw std::invalid_argument("Resulting date is before 1/1/1753"); 

return date; 

注:あなたが作成することができますあなたが試したようなオブジェクトです(そしてnullableではなく、単にデフォルトで構築されます)、bu機能するためにはデフォルトのコンストラクタ(引数なし)が必要です。しかし、あなたのケースでは、示されているように全く必要ではありません。空の括弧を入れると、コード行がコンパイルされるようにインスタンスを作成する代わりにSimpleDateを返す関数が宣言されますが、使用しようとすると後でブレークします。

+0

ありがとうございます!私はこれを数時間かけて粉砕し、トンネルビジョンを得ました。とても有難い。 – Luke4211

関連する問題