从不兼容的类型分配给 Double?

Assigning to Double from incompatible type?

编程新手,无法使用结构将数组传递给函数。有任何想法吗?编译器生成错误 "Assigning to Double from incompatible type weather"。 提前致谢/

  struct Weather
   {
       double TotalRainfall[12];
       double HTemperature[12];
       double LTemperature[12];
       double AverageTemperature[12];

   };

    Weather AverageTemp(Weather *W, int size)
    {

        for(int i = 1;i<=12;i++)
        {
           return W[i].HTemperature[i]+W[i].LTemperature[i];


        }

    }

    int main()
    {
        Weather W[12];
        int size =12;

        for(int i = 1;i<=12;i++)
        {
            cout << "Enter Total Rainfall in " << i << " month";
            cin >> W[i].TotalRainfall[i];

            cout << " Enter the highest temperature " << i << " month";
            cin >> W[i].HTemperature[i];

            cout << " Enter the Lowest temperature " << i << " month";
            cin >> W[i].LTemperature[i];


        }

         for(int i = 1;i<=12;i++)
         {
             W[i].AverageTemperature[i]=  AverageTemp(W, size);
         }

您的代码中有几处错误。让我们从不兼容类型分配双精度的错误开始。 AverageTemp 在你的例子中是一个 return 是 Weather 类型的方法。我假设您的意思是 return 双精度值。

另一个问题是您要输入每个月的总降雨量、最高和最低温度以及平均温度。根据我的测量,您将需要 12*4 或 48 个双打。相反,您有一个包含 12 个 Weather 结构的数组,每个结构包含 48 个双精度值或 576 个双精度值!我猜你不是故意的,所以我简化了你的例子,只使用一个 Weather 结构。现在我们使用一个 Weather 实例并将该实例作为参考传递给 AverageTemp(因此我们不制作副本)。

第三个问题比较隐蔽,但你在解决了前两个问题后肯定会发现它。您不能使用索引 n 访问 n 数组的第 n 个元素。换句话说,第一个元素是用索引 0 访问的,因为数组是从零开始访问的。这意味着每个循环 i 从 1 开始并以 12 结束都会导致数字 12 出现丑陋的错误,因为数组中不存在 13th 元素。大多数程序员让索引变量从 0 开始计数,但不等于限制,因此您永远不必担心会超过限制。结果,我补偿了月份数的显示。

新代码如下:

// ...

double AverageTemp(Weather &w, int index)
{
    return (w.HTemperature[index]+w.LTemperature[index])/2.0;
}

int main()
{
    Weather w;
    int size =12;

    for(int i = 0;i<12;i++)
    {
        cout << "Enter Total Rainfall in " << i+1 << " month" << endl;
        cin >> w.TotalRainfall[i];

        cout << " Enter the highest temperature " << i+1 << " month" << endl;
        cin >> w.HTemperature[i];

        cout << " Enter the Lowest temperature " << i+1 << " month" << endl;
        cin >> w.LTemperature[i];
    }

    for(int i = 0;i<12;i++)
    {
        w.AverageTemperature[i]=  AverageTemp(w, i);
    }
}

如有任何问题请提问!重要的是你理解这些概念而不是拥有工作代码,因为它会在未来更好地为你服务。