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

时间:2016-03-07 14:12:48

标签: c++ arrays function structure

编程新手,无法使用struct将数组传递给函数。有任何想法吗?编译器生成错误“从不兼容的类型天气分配到双精度”。  提前谢谢/

  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);
         }

1 个答案:

答案 0 :(得分:2)

您的代码中存在多个错误。让我们从不兼容类型分配double的错误开始。您的示例中的AverageTemp是一个返回Weather类型的方法。我假设你打算返回一个double值。

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

第三个问题有点微妙,但在你修复前两个问题后肯定会发现它。您不能使用索引n访问n数组的第n个元素。换句话说,使用索引 0 访问第一个元素,因为从零开始访问数组。我从1开始到12结束的每个循环的含义都会导致数字12出现一个丑陋的错误,因为你的数组中没有第13个元素。大多数程序员让索引变量从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);
    }
}

如果您有任何疑问,请询问!重要的是要理解这些概念而不是工作代码,因为它将来会更好地为您服务。