Ошибка компиляции C ++; перегрузка оператора потока

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

в 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

Решение

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

2

Другие решения

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

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

Удалить квалификатор const

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

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

1
По вопросам рекламы [email protected]