2016-03-07 46 views
0

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

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

看看你的代码。 'AverageTemp()'返回什么?什么是W [i] .HTemperature [i]'?你认为这应该起作用吗? – NathanOliver

+0

在你的函数'AverageTemp(..)'中你定义它返回'Weather'结构,但是在你的'return'语句中你返回'double'。 另外,在你的'for .. loop'中,整个函数将在第一次迭代中完成..(可能存在逻辑错误)! – Lincoln

+0

此外,K元素的数组从0到K-1索引。 – molbdnilo

回答

2

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

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

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

如果您有任何疑问,请!理解这些概念非常重要,因为它将在未来为您提供更好的服务。

+1

谢谢你这么多 –