2015-05-16 3 views
-1

Я пытался суммировать два массива в третий!Недопустимые операнды типов 'int' и '<неразрешенный перегруженный тип функции>' для двоичного 'оператора <<'

int main() 
{ 
    int RoadHeights[2000] , TopoHeights[2000] , Differences[4000] , i , n ; 

    cout << "Enter the number of stations! " << endl; 
    cin >> n; 

    cout << "Enter the heights of stations on Road! " << endl; 

    for (i=0 ; i<n ; i++) 
     cin >> RoadHeights[i]; 

    cout << "Enter the heights of stations on Ground! " << endl; 

    for (i=0 ; i<n ; i++) 
     cin >> TopoHeights[i]; 

    cout << "Height differences are: " << endl; 

    for (i=0 ; i<n ; i++) 
     cout << Differences [4000] = RoadHeights[i] - TopoHeights[i] << endl; 

    return 0; 
} 
+0

Что не работает? – dasblinkenlight

+0

Ошибка в последней строке! Я не могу получить третий массив, когда запускаю программу. –

+0

2 вещи: 'Различия [4000]' вне пределов, а оператор '=' имеет [более низкий приоритет] (http://en.cppreference.com/w/cpp/language/operator_precedence), чем '<< 'оператор, поэтому завершите свое выражение круглыми скобками. – AndyG

ответ

2

2 вещи: различия [4000] выходит за пределы границ, и оператор = имеет lower precedence, чем оператор < <, поэтому завернуть ваше выражение в скобках:

cout << (Differences [i] = RoadHeights[i] - TopoHeights[i]) << endl; 

В противном случае, cout << Differences[i] сначала оценивается, возвращая ostream&, фактически становясь

cout << Differences[i]; 
cout = (RoadHeights[i] - TopoHeights[i]) << endl; 

Очевидно, что вторая строка является ошибкой

Это решит вашу проблему с компилятором, но я предполагаю, что у вас больше логических проблем. Например, размер массива Hardcoded, но пользовательский ввод для размера впоследствии? Что делать, если n является 5000? Попробуйте вместо этого использовать std::vector.

std::vector<int> RoadHeights, TopoHeights, Differences; 
int i , n ; 

cout << "Enter the number of stations! " << endl; 
cin >> n; 
RoadHeights.resize(n); 
TopoHeights.resize(n); 
Differences.resize(n); 
// proceed as normal 
+0

: O Работал как шарм !! Спасибо, мужчина> :) О 4000 ... Я просто пытался его решить: D Не знал, что делать. круглые скобки решили проблему. ;) –

Смежные вопросы