2015-09-03 162 views
-1

我想学习C,并且在我最近的代码中遇到了一个我不明白的编译错误。我真的不明白错误是什么意思,所以我无法解决这个问题。我做了大量的谷歌搜索,但不明白我遇到的解释。'*'的类型参数无效(有'双')C

有人可以澄清吗?

错误:

cygwin compilartion output

代码:

#include <stdio.h> 
#include <unistd.h> 
#include "plant.h" 

double watercredit = 0.0; 
int needwater = 200; 
double wateredamount = 0.0; 

int main() 
{ 
    watercredit=215.00; 

    while(watercredit > 0.0) 
    { 
     watercredit--; 
     if(watercredit < needwater) 
     { 
      printf("You need to water the plant!\n"); 
      printf("enter amount of water:\n"); 
      scanf("%lf", wateredamount); 
      watered(&wateredamount); 
      //watercredit = watercredit + wateredamount; 
      wateredamount = 0; 
     } 
     if(watercredit == 0) 
     { 
      printf("You plant died!"); 
      return 0; 
     } 

     printf("Watercredit: %lf\n", watercredit); 
     sleep(1); 
    } 

    return 0; 
} 

//takes the amount of water added and increases credit 
void watered(double* amount) 
{ 
    *watercredit = *watercredit + amount; 
} 

Plant.h:

void watered(double* amount); 
+0

无关的错误,但'的scanf( “%LF”,wateredamount);'应'的scanf( “%LF”,&wateredamount);'。另外请注意,不需要通过引用该函数来传递'wateredamount'。 –

回答

3

你解引用了错误的变量。

如果您看到您浇水的功能,则amount的类型为double*,即指向double的指针。但是,watercreditdouble类型的全局变量。您不能在双精度型上使用*运算符,因为这不是指针。

该函数应该工作:

//takes the amount of water added and increases credit 
void watered(double* amount) 
{ 
    watercredit = watercredit + *amount; 
} 
2

你传入amount为指针watered,不watercredit,这是一个double(这也是一个全局变量,所以不是一个好主意)。

C声明的总体思路是,他们告诉你它是如何预期使用,使

double wateredamount = 0.0; 

预计在表达式中使用像a = wateredamount + 1wateredamount = 5。而

void watered(double* amount) 

表示的是你期待看到像

thing = *amount 

表述哪些是相反的,以你的代码实际上做

相关问题