0

Я изучаю перегрузку потока потока C++. Не удается получить это для компиляции в Visual Studio.Ошибка компиляции C++; перегрузка потока потока

В разделе оператора istream& компилятор выделяет каты сразу после ins и говорит no operator >> matches these operands.

Может кто-нибудь быстро запустить его и сказать мне, что случилось?

***************** 

// CoutCinOverload.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
using namespace std; 

class TestClass { 

friend istream& operator >> (istream& ins, const TestClass& inObj); 

friend ostream& operator << (ostream& outs, const TestClass& inObj); 

public: 
    TestClass(); 
    TestClass(int v1, int v2); 
    void showData(); 
    void output(ostream& outs); 
private: 
    int variable1; 
    int variable2; 
}; 

int main() 
{ 
    TestClass obj1(1, 3), obj2 ; 
    cout << "Enter the two variables for obj2: " << endl; 
    cin >> obj2; // uses >> overload 
    cout << "obj1 values:" << endl; 
    obj1.showData(); 
    obj1.output(cout); 
    cout << "obj1 from overloaded carats: " << obj1 << endl; 
    cout << "obj2 values:" << endl; 
    obj2.showData(); 
    obj2.output(cout); 
    cout << "obj2 from overloaded carats: " << obj2 << endl; 

    char hold; 
    cin >> hold; 
    return 0; 
} 

TestClass::TestClass() : variable1(0), variable2(0) 
{ 
} 

TestClass::TestClass(int v1, int v2) 
{ 
    variable1 = v1; 
    variable2 = v2; 
} 

void TestClass::showData() 
{ 
    cout << "variable1 is " << variable1 << endl; 
    cout << "variable2 is " << variable2 << endl; 
} 

istream& operator >> (istream& ins, const TestClass& inObj) 
{ 
    ins >> inObj.variable1 >> inObj.variable2; 
    return ins; 
} 

ostream& operator << (ostream& outs, const TestClass& inObj) 
{ 
    outs << "var1=" << inObj.variable1 << " var2=" << inObj.variable2 << endl; 
    return outs; 
} 

void TestClass::output(ostream& outs) 
{ 
    outs << "var1 and var2 are " << variable1 << " " << variable2 << endl; 
} 
+0

Спасибо СООО много !!! Да, удаление «const» решило его, и это совершенно разумно! – Timbo1711

ответ

2

operator >>() следует принимать TestClass& вместо const TestClass& в качестве 2-го параметра, так как вы, как ожидается, изменить этот параметр при чтении istream.

1

Вы должны изменить тип параметра inObj на ссылку на неконстантный, поскольку он должен быть изменен в operator>>. Вы не можете изменять объект const, поэтому вы не можете вызвать opeartor>> на объект const (и его члены), это то, что компилятор жалуется.

friend istream& operator >> (istream& ins, TestClass& inObj); 
1

Удалить Классификатор сопзЬ

friend istream& operator >> (istream& ins, const TestClass& inObj); 
              ^^^^^ 

Вы не можете изменить постоянный объект.

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

  • Нет связанных вопросов^_^