2015-10-25 3 views
0

У меня проблема при попытке распечатать с помощью std::ostream. Я проверил код дважды и тройным. но безуспешно. VC14 всегда дает ошибку назад, как показано ниже:Ошибка компилятора VS2015 C2679:

ошибка C2679: бинарный «< <»: ни один оператор не найден, который принимает правосторонней операнда типа „Const зОго :: строки“ (или нет приемлемой преобразование)

я хотел бы, если кто-то пожалуйста, помогите мне fiugre, что не так с этим кодом

код:

#include <iostream> 
#include <iomanip> 
#include <array> 
#include <cstring> 

struct Student 
{ 
    std::string name; 
    int midTerm; 
    char grade; 

    static void displayHeader(std::ostream& str) 
    { 
     str << std::left 
      << std::setw(10) << " Names" 
      << std::setw(10) << "Exam" 
      << std::setw(10) << "Grade"; 
     str << std::setfill('-') << std::setw(28) << '\n'; 
    } 

    friend std::ostream& operator<<(std::ostream& str, const Student& data) 
    { 
     str << std::setfill(' ') << std::left 
      << std::setw(10) << data.name 
      << std::setw(11) << data.midTerm 
      << std::setw(2) << data.grade; 

     return str; 
    } 
}; 

template<typename C> 
void display(const C& c) 
{ 
    using ValueType = typename C::value_type; 

    ValueType::displayHeader(std::cout); 

    for (const auto& i : c) 
    { 
     std::cout << '\n' << i; 
    } 
} 

int main() 
{ 
    std::array<Student, 5> a 
    { 
     { 
      { "me",  60, 'D' }, 
      { "matt", 88, 'B' }, 
      { "pop",  88, 'B' }, 
      { "john", 93, 'A' }, 
      { "jesseca", 82, 'B' } 

     } 
    }; 

    display(a); 

    std::sort(a.begin(), a.end(), 
     [](const auto& a, const auto& b) 
    { 
     return std::tie(a.midTerm, a.grade, a.name) > std::tie(b.midTerm, b.grade, b.name); 
    }); 

    std::cout << "\n\nafter sorting\n\n"; 

    display(a); 
} 
+0

вам не хватает какой-то включает как ',' , ''

+1

@PiotrSkotnicki спасибо, я включил ', я не знаю, как это произошло, но благодаря – MORTAL

ответ

1

Как указывает Петр, проблема в том, что вы забыли включить <string>.

Причины вы не получите явное предупреждение о неизвестном типе std::string это то, что визуальные студии vector включает stdexcept, который включает в себя xstring, который содержит вышеописанную декларацию std::string.

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