0

次のコードでこのエラー メッセージが表示されますが、まったく意味がありません。このコードを確認して、何が問題なのか教えていただけますか? 関連する行のコードにコメントを付けました。

#import <Foundation/Foundation.h>

typedef struct {
    float exchangeRate;
    double budget;
    double euroTransaction;
} budget;

int main(int argc, const char * argv[])
{
    budget vacationBudget;

    void spendDollars (double dollars) {  //Expected ';' at end of declaration
        vacationBudget.budget -= 100;
    }

    void chargeEuros(double euros) {
        vacationBudget.euroTransaction = euros*vacationBudget.exchangeRate;
        vacationBudget.budget -= vacationBudget.euroTransaction;
    }

    vacationBudget.exchangeRate = 1.2500;
    vacationBudget.budget = 1000.00;
    double numberDollars = 100;
    double numberEuros = 100;

    spendDollars(numberDollars);
    NSLog(@"Converting %.2f US dollars into euros leaves $%.2f", numberDollars, vacationBudget.budget);



    NSLog(@"Charging %.2f euros leaves $%.2f", numberEuros, vacationBudget.budget);

    return 0;
}
4

5 に答える 5

3

メイン関数の外に、spendDollars 関数と chargeEuros 関数を移動します。

于 2012-04-13T21:47:03.567 に答える
2

関数をメイン内に配置することはできません。への変更:

#import <Foundation/Foundation.h>

    typedef struct {
        float exchangeRate;
        double budget;
        double euroTransaction;
    } budget;

budget vacationBudget;

void spendDollars (double dollars) {  //Expected ';' at end of declaration
            vacationBudget.budget -= 100;
    }

    void chargeEuros(double euros) {
            vacationBudget.euroTransaction = euros*vacationBudget.exchangeRate;
            vacationBudget.budget -= vacationBudget.euroTransaction;
    }

    int main(int argc, const char * argv[])
    {

        vacationBudget.exchangeRate = 1.2500;
        vacationBudget.budget = 1000.00;
        double numberDollars = 100;
        double numberEuros = 100;

        spendDollars(numberDollars);
        NSLog(@"Converting %.2f US dollars into euros leaves $%.2f", numberDollars, vacationBudget.budget);



        NSLog(@"Charging %.2f euros leaves $%.2f", numberEuros, vacationBudget.budget);

        return 0;
    }
于 2012-04-13T21:49:03.223 に答える
1

関数内に関数を含めるのは良い考えではありません (つまり、コンパイルされず、つまり、あなたが見ているものは論理的に意味がありません)。

于 2012-04-13T21:47:40.883 に答える
1

これは、別の関数 ( ) 内 で関数 ( ) を定義しているためです。ネストされた関数は許可されていません。その意味では常に「グローバル」です。spendDollarsmain

ただし、別の関数内で関数を 宣言することは許可されています。これは、コンパイラへの手がかりとして機能します。その関数は別の場所で宣言されていますが、パラメーターと戻り値の型を認識しています (int宣言されていない関数を使用する場合は、これがデフォルトになります)。 .

そのため、コンパイラは別の関数内の関数構文を確認し、関数シグネチャと同様に宣言であると想定します。そして、次のブロックの前にセミコロンなしで宣言が終了したため、左中かっこが表示され、エラーが生成されます。

spendDollars 関数とchargeEuros を outside に移動する必要がありmainます。そのため、変更するローカル変数への参照を渡す必要があります。これらは動作するはずです:

void spendDollars (budget *b, double dollars)
{
    b->budget -= 100;
}

void chargeEuros(budget *b, double euros) {
    b->euroTransaction = euros*vacationBudget.exchangeRate;
    b->budget -= vacationBudget.euroTransaction;
}

->演算子は、使用した場合と同様に、ポインターで直接動作することに注意してください

(*b).budget -= 100;

ポインターを逆参照し、構造体を操作します。新しい関数を次のように呼び出します

spendDollars(&vacationBudget, numberDollars);
于 2012-04-13T22:01:32.170 に答える
0

あなたの機能spendDollarschargeEurosメインにすることはできません。

しかし、メソッドでメソッドを作成できないというのは真実ではありません。Sinds iOS 4.0 ブロックを作成できます。

詳細については、ブロックに関するこのチュートリアルに従ってください

于 2012-04-13T21:53:44.433 に答える