我收到以下代码的此错误消息,但它根本没有意义。你能检查一下这段代码并告诉我哪里错了吗?已对相关行中的代码进行了评论。
#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;
}
答案 0 :(得分:3)
将spendDollars和chargeEuros函数移到main函数之外。
答案 1 :(得分: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;
}
答案 2 :(得分:1)
在函数中拥有一个函数并不是一个好主意(因为它不会编译 - 即你正在看到的东西 - 它没有逻辑意义),移动花费美元并改变欧元在main之外,并将vacationBudget作为参数传递
答案 3 :(得分:1)
那是因为你在另一个内部定义一个函数(spendDollars
)
功能(main
)。不允许使用嵌套函数,它们总是“全局”
从那个意义上说。
但是,您可以在另一个内部声明一个函数,然后
充当编译器的线索:该函数在其他地方声明,但现在它
知道参数和返回类型(如果使用,则默认为int
未声明的功能)。
那么,编译器会在另一个函数中看到函数语法 期望它是一个声明,就像函数签名一样。然后呢 当声明结束时,看到左大括号并产生错误 在下一个区块之前没有分号。
您需要将功能spendDollars
和chargeEuros
移到外面
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);
答案 4 :(得分:0)