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

将pendDollars 和chargeEuros 函数移到main 函数之外。

于 2012-04-13T21:47:03.567 回答
2

函数不能在 main 中。改成:

#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

在函数中包含函数不是一个好主意(因为它不会编译 - 即你所看到的 - 而且它没有逻辑意义),将 sendDollars 和 changeEuros 移到 main 之外并将vacationBudget作为参数传递

于 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 你可以创建 Blocks。

有关更多信息,请遵循有关块的教程

于 2012-04-13T21:53:44.433 回答