2015-04-27 3 views
-5

Сообщение полной ошибки читает:Ошибка C2679: бинарный «<<»: ни один оператор не найден (вектор итераторы используется)

Ошибка C2679: двоичные «< <»: ни один оператор не найден, который принимает правый операнд типа «станд :: _ Vector_iterator < станд :: _ Vector_val < станд :: _ Простой _ типы < проекты>>>» (или нет приемлемой конверсии)

не хорошенькая, но вот мой код к ошибке, с функциями геттеров и сеттеров, происходящими в другом месте, но они не кажутся важными для этой ошибки:

#include "Project.hpp" 
#include <iostream> 
#include <sstream> 
#include <string> 
#include <fstream> 
#include <list> 
#include <ostream> 
#include <stdlib.h> 
using namespace std; 

int main(){ 


cout << "Welcome to our project topic allocator, please enter the student spreadsheet; " << endl; 
vector<student> studentvector; 
vector<projects> projectsvector; 
vector<projects> availchoicevector; 

//string excelsupervisor; 
//supervisor staff; 

string excelstudent; 
student pupil; 

string excelprojects; 
projects selections; 

selections.zbbb(excelprojects); 
//pupil.xbbb(excelstudent); 
//staff.ybbb(excelsupervisor); 
int counter; 


vector<student>::iterator first1 = studentvector.begin(), last1 = studentvector.end(), fileline1; 

vector<projects>::iterator first2 = projectsvector.begin(), last2 = projectsvector.end(), fileline2; 

for (fileline1 = studentvector.begin(), fileline2 = projectsvector.begin(); fileline1 != studentvector.end(), fileline2 != projectsvector.end(); fileline1++, fileline2++){ 

    cout << "Student ID  " << fileline1->get_studentname() << endl; 
    int var1 = fileline1->get_numberofselections(); 

    if (var1 = !4){ 

     cout << "Student has not made 4 choices, consult student!" << endl; 
     fileline2 = fileline2 + (var1 - 1); 
     continue; 
    } 
    else{ 
     //for (fileline2; fileline2 < fileline2 + 4; fileline2++){ 
     const auto &p = fileline2->get_projectID(); //fileline2 = 1st choice 
     auto y = find(availchoicevector.begin(), availchoicevector.end(), p); 
     if (y != availchoicevector.end()){ 
      cout << "Project ID . Supervisor ID of allocated choice: " << *y << "." << fileline2->get_supervisorIDproj << endl;} 

С ошибкой, имеющей место на последней строке в поле «< <» перед «* y».

Вот заголовок, соответствующий этой части кода.

class projects{ 

private: 
string projectname, projectsup, supervisornameproj, stunameproj; 
float projectID; 
int itterator, rank, classs, supervisorIDproj, stuIDproj, regnumproj; 



public: 





projects(); 
~projects(); 
void set_projectname(string); 
void set_supervisornameproj(string); 
void set_stunameproj(string); 

void set_stuIDproj(int); 
void set_supervisorIDproj(int); 
void set_projectID(int); 
void set_regnumproj(int); 
void set_rank(int); 
void set_classs(int); 


string get_projectname(){return projectname;} 
string get_stunameproj(){return stunameproj;} 
string get_supervisornameproj(){return supervisornameproj;}  

int get_regnumproj(){return regnumproj;} 
int get_supervisorIDproj(){return supervisorIDproj;} 
int get_stuIDproj(){return stuIDproj;} 
int get_projectID(){return projectID;} 
int get_rank(){return rank;} 
int get_classs(){return classs;} 


bool zbbb(string); 
bool sorting(int); 

vector<projects> projectsvector; 
vector<projects> availchoicevector; 
}; 

Я хочу знать, как решить этот вопрос. Я понимаю, что должен перегрузить оператор < <, но я не знаю, как это сделать для этого случая!

Любая помощь была бы принята с благодарностью!

+0

[Как задать хороший вопрос?] (Http://stackoverflow.com/help/how-to-ask) «Включите достаточно кода, чтобы другие могли воспроизвести проблему. Для справки прочтите [ Как создать минимальный, полный и проверенный пример.] (Http://stackoverflow.com/help/mcve) ". «Когда вы задаете вопрос о проблеме, вызванной вашим кодом, вы получите гораздо лучшие ответы, если вы предоставите код, который люди могут использовать для воспроизведения проблемы». –

+2

Вам нужно перегрузить 'operator <<' для класса проектов. Вот пример [MSDN] (https://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx?f=255&MSPPError=-2147217396) – NathanOliver

+1

Ну, сообщение об ошибке компилятора довольно ясно. Если вы хотите иметь эту функциональность, вам необходимо предоставить свою собственную реализацию. Я не выхожу из коробки. –

ответ

1

Вы должны перегрузить оператора < < между объектом ostream и вашим собственным объектом.

ostream &operator<<(ostream &output, const projects &prj) 
{ 
    //print something you want of prj with output << ... 
    return output; 
} 

Кроме того, вам нужно добавить это определение друг к классу, если перегруженный оператор должен получить доступ к его закрытым членам данных:

friend ostream &operator<<(ostream &, const projects &); 

Вы не можете перегрузить оператор как метод члена, потому что функция фактически используется для объекта ostream, а не для вашего объекта.

+1

, вероятно, хотите, чтобы 'projects &' были 'const'. –