2015-09-03 75 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 

表述哪些是相反的,以你的代碼實際上做

相關問題