'*'的无效类型参数(具有'double')C

时间:2015-09-03 12:45:47

标签: c cygwin

我正在尝试学习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);

2 个答案:

答案 0 :(得分:3)

您正在取消引用错误的变量。

如果你看看你的功能被浇水,那么amount属于double*类型,即指向双精度的指针。但是,watercreditdouble类型的全局变量。你不能在double上使用*运算符,因为它不是指针。

此功能应该有效:

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

答案 1 :(得分:2)

您正在传递amount作为watered的指针,而不是watercredit,这是一个double(它也是一个全局变量,所以不是一个好主意)。

c声明的一般概念是它们向您展示了如何使用它,以便

double wateredamount = 0.0;

预计将用于a = wateredamount + 1wateredamount = 5等表达式。而

void watered(double* amount)

表示您希望看到像

这样的表达式
 thing = *amount

与您的代码实际执行的内容相反