2015-04-26 3 views
-4

Я хочу, чтобы программа знала наименьшее число когда-либо замеченных и самое большое число . Это код:Ошибка: правый операнд <= имеет неправильный тип при использовании вектора

#include<iostream>; 
#include<vector>: 
#include<algorithm> 


using namespace std; 


int main(){ 
vector<double>number; 
double x; 
while (cin >> x){ 
    number[0] =x ; 

    number.push_back(x); 


} 
for (int y=0; y <= number.size; y++){ 
    sort(number.begin(), number.end()); 
    if (number[y] >= number[0]){ 
     cout << "the largest so far\n"; 
    } 
    else if (number[y] >= number[number.size()/2]){ 
     cout << "the smalest so far \n"; 
    } 
    else{ 
     cout << x; 
    } 
} 
}  

Каждый раз, когда я запускаю код он показывает эту ошибку:

error C2297: '<=' : illegal, right operand has type 'unsigned int    

(__thiscall std::vector<double,std::allocator<_Ty>>::*)(void) throw() const' 
    1>   with 
    1>   [ 
    1>    _Ty=double 
    1>   ]  

я пытаюсь исправить это, но я не знаю, что это проблема.

+2

'size' - это функция-член, но вы обращаетесь к ней так, как будто это значение. –

+0

FWIW, GCC и Clang дают действительно разумные сообщения об ошибках здесь. – chris

+1

Если вы хотите узнать, являетесь ли вы самым высоким человеком в мире, вам нужно сравнить себя с самым высоким известным человеком, а не со всеми. Для этого вам не нужен вектор. – molbdnilo

ответ

0

Ошибка говорит вам, что правый операнд вашего оператора <= должен быть unsigned int.

Это значит, что у вас есть проблема с number.size. На самом деле, size() является функцией членом класса vector и, таким образом, должны быть записаны следующим образом: number.size()

for (int y=0; y < number.size; y++) {/*...*/} 

Также отметим, что индекс vector старт в 0 и перейти к size() - 1. Таким образом, вы должны использовать < и не <=

Некоторые другие комментарии:

Если вы хотите, чтобы отсортировать vector, вы можете сделать это за пределами петли for, так как вы не модифицируя вектор вне цикла, когда достаточно.

Что касается вашего алгоритма, я не уверен, какой выход вы пытаетесь достичь именно. Но, так как ваш вектор будет отсортирован, наименьшее число будет number[0] и самый большой number[number.size()-1]

Отметим также, что у вас есть некоторые algorithm функции, которые могут помочь вам достичь вашей цели, даже сортировкой свой вектор: std::min_element & std::max_element

+0

Поскольку вы пишете, как правильно его использовать, вы должны сделать это и в цикле. Также исправить выключение одной ошибкой '<=' vs '<'. –

+0

Большое спасибо за информацию, наконец, я исправлю свой код Честно говоря, я очень начинающий программист, и я изучаю Программирование из книги, поэтому спасибо –