2016-09-08 2 views
1

Я не понимаю, почему этот код дает мне ошибкуC++: Ошибка на ostream << оператора

void printSalesFile(vector< vector<float> > & list) 
{ 
    ofstream outfile; 
    outfile.open("sales.lst", ios::out); 
    if (outfile.is_open()) 
    { 
     outfile << setw(6) << right << "ID" 
       << setw(12) << "January" 
       << setw(12) << "Febuary" 
       << setw(12) << "March" 
       << setw(12) << "April" 
       << setw(12) << "May" 
       << setw(12) << "June" 
       << setw(12) << "July" 
       << setw(12) << "August" 
       << setw(12) << "September" 
       << setw(12) << "October" 
       << setw(12) << "November" 
       << setw(12) << "December" << endl; 

     for (unsigned int i = 0; i <= list.size(); i++) 
     { 
      outfile << setw(6) << right << list[i]; //i don't understand why it says there's an error here. 
      for(int j = 0; j <= 11; j++) 
       outfile << setw(12) << right << list[i][j]; 
      outfile << endl; 
     } 
    } 
    outfile.close(); 
} 

Я попытался удалить его и вставить то, что я написал выше, что работает, но до сих пор получить ошибки.

Вот сообщение об ошибке:

D:\QT\Salesperson\main.cpp:295: error: cannot bind 'std::basic_ostream<char>' lvalue to 'std::basic_ostream<char>&&' 
     outfile << setw(6) << list[i]; 
       ^

Что касается текстового файла, он имеет 2 линии, 1 для заголовка и другой, который имеет значения от всей совокупности до 0

+6

Не спам-теги! Это не C! – Olaf

+0

Попробуйте использовать другое имя переменной, чем 'list'. Если у вас 'using namespace std;', то компилятор будет использовать 'std :: list', и он путается с вашим именем переменной. –

+0

Измените свой пост с помощью определения 'list'. В одном утверждении это одномерная переменная, в другой - двумерная переменная. –

ответ

2

Поскольку вы using namespace std дон 't объявить list как объект, похоже, что вы затеняете это имя класса. Или еще лучше, не используйте using namespace std из-за этой проблемы.

Но ваши проблемы обыкновение останавливаться, смотреть на этой линии:

outfile<<setw(6)<<right<<list[i]; 

list является vector< vector<float> > так list[i] рассосется к vector<float>, как вы печатаете что?

В этой строке:

for (unsigned int i=0; i<=list.size();i++) 

должен быть i < list.size(), что происходит, когда i == list.size(), вы будете ссылаться на vector[vector.size()], который будет вызывать неопределенное поведение (помните, что массив ссылок начинается с 0).

Могут быть и другие вещи.

2
outfile<<setw(6)<<right<<list[i]; //i don't understand why it says there's an error here. 

Это потому, что нет вставки потока для std::vector<float>.

Обратите внимание, что for(unsigned int i = 0; i <= list.size(); ++i) будет сбежать от конца списка. Используйте < вместо <=.

+0

Это не приведет к указанной ошибке: http://ideone.com/EX89Fq –

+0

@Ben Проверьте последнюю строку дампа ошибки в вашей ссылке. – aschepler

+0

@aschepler Ничего себе, да, думаю, я должен был прочитать снизу. –

-1

Большое спасибо за указание на ошибки в моем коде, простите меня с тех пор, как я только начал.

for (unsigned int i=0; i<list.size();i++) 
{ 
    outfile<<setw(6)<<right<<list[i][0]; 
    for(int j = 1; j<13; j++) 
     outfile<<setw(12)<<right<<list[i][j]; 
    outfile<<endl; 
} 

я взял те ошибки, которые все указывали, и изменил часть кода в этом one.It теперь работает большое спасибо!

то, что меня отбросило, было ошибкой, указывающей на < <, что заставило меня не выглядеть так, как в списке было написано неправильно.

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