0

C++ ストリーム演算子のオーバーロードを学習しています。これを Visual Studio でコンパイルできません。

演算子セクションでは、コンパイラはistream&直後のカラットを強調表示し、.insno 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;
}
4

3 に答える 3

2

operator >>()からの読み取り中にそのパラメーターを変更することが予想されるため、2 番目のパラメーターとしてTestClass&代わりに を使用する必要があります。const TestClass&istream

于 2016-07-28T15:30:32.647 に答える
1

修飾子 const を削除します

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

定数オブジェクトを変更することはできません。

于 2016-07-28T15:31:08.180 に答える
1

のパラメータ タイプは でinObj変更されるはずなので、非 const を参照するように変更する必要がありますoperator>>。const オブジェクトを変更することはできないため、opeartor>>const オブジェクト (およびそのメンバー) を呼び出すことはできません。これがコンパイラの不満です。

friend istream& operator >> (istream& ins, TestClass& inObj);
于 2016-07-28T15:30:44.827 に答える