+ -
当前位置:首页 → 问答吧 → VC++ 6.0下,重载<<运算符遇到的问题

VC++ 6.0下,重载<<运算符遇到的问题

时间:2011-11-28

来源:互联网

测试代码如下
C/C++ code

//: IOSOP.CPP -- Iostream operator overloading
// Example of non-member overload operators

#include <iostream>
#include <strstrea.h>
#include <string.h>



class intarray {
    enum { sz = 4 };
    int i[sz];
public:
    intarray() {
        memset( i, 0, sz*sizeof(*i) );
    }
    int& operator[] (int x) {
        return i[x];
    }
    friend ostream& operator << ( ostream& os, const intarray& ia );
    friend istream& operator >> ( ostream& is, intarray& ia );
};

    ostream& operator << ( ostream os, const intarray& ia ){
        for( int j = 0; j < ia.sz; j++ ){
            os << ia.i[j];
            if( j != ia.sz - 1 )
                os << endl
        }
        os << endl;
        return os;
    }
    
    istream& operator>>( istream& is, intarray& ia ) {
        for( int j = 0; j< ia.sz; j++ )
            is >> ia.i[j];
        return is;
    }


    int main(void) {
        istrstream input("47 34 56 92 103");
        intarray I;
        input >> I;
        I[4] = -1;
        cout << I;
        return 0;
    }





错误如下:
error C2248: 'sz' : cannot access private enumerator declared in class 'intarray'

求解答。。

作者: gengzhikui1111   发布时间: 2011-11-28

单看提示是访问类的私有变量了。

作者: czqfrms   发布时间: 2011-11-28

引用 1 楼 czqfrms 的回复:

单看提示是访问类的私有变量了。

可我设置友元了啊

作者: gengzhikui1111   发布时间: 2011-11-28

C/C++ code
#include <iostream>
#include <sstream>

using namespace std;

class intarray {
    
    
public:
    const static int sz = 4;

    intarray() {
        memset( i, 0, sz*sizeof(*i) );
    }
    int& operator[] (int x) {
        return i[x];
    }
    friend ostream& operator << ( ostream& os, const intarray& ia );
    friend istream& operator >> ( ostream& is, intarray& ia );

    int i[sz];
};

ostream& operator << ( ostream &os, const intarray& ia ){
    for( int j = 0; j < ia.sz; j++ ){
        os << ia.i[j];
        if( j != ia.sz - 1 )
            os << endl;
    }
    os << endl;
    return os;
}

istream& operator>>( istream& is, intarray& ia ) {
    for( int j = 0; j< ia.sz; j++ )
        is >> ia.i[j];
    return is;
}


int main(void) {
    istringstream input("47 34 56 92 103");
    intarray I;
    input >> I;
    I[4] = -1;
    cout << I;
    return 0;
}

作者: mougaidong   发布时间: 2011-11-28

还是不行啊,vc++6.0编译通不过。
另外,我用enum表示常量sz,有什么错误吗?

作者: gengzhikui1111   发布时间: 2011-11-28

楼主,珍惜生命,远离VC6。
换个编译器编译一下。

作者: taodm   发布时间: 2011-11-28

....

作者: lthyxy   发布时间: 2011-11-28

friend istream& operator >> ( ostream& is, intarray& ia );
第一个形参类型错误了
还有你怎么不添加using namespace std;

作者: liux0614   发布时间: 2011-11-28

C/C++ code
//: IOSOP.CPP -- Iostream operator overloading
// Example of non-member overload operators
#include <iostream.h>
#include <strstrea.h>
#include <string.h>


class intarray {
    enum { sz = 4 };
    int i[sz];
public:
    intarray() {
        memset( i, 0, sz*sizeof(*i) );
    }
    int& operator[] (int x) {
        return i[x];
    }
    friend ostream& operator<<( ostream& os, const intarray& ia );
    friend istream& operator>>( istream& is, intarray& ia );
};

    ostream& operator<<( ostream &os, const intarray& ia ){
        for( int j = 0; j < ia.sz; j++ ){
            os << ia.i[j];
            if( j != ia.sz - 1 )
                os << endl;
        }
        os << endl;
        return os;
    }
    
    istream& operator>>( istream& is, intarray& ia ) {
        for( int j = 0; j< ia.sz; j++ )
            is >> ia.i[j];
        return is;
    }
    
    int main(void) {
        istrstream input("47 34 56 92 103");
        intarray I;
        input >> I;
        I[4] = -1;
        cout << I;
        return 0;
    }

作者: gengzhikui1111   发布时间: 2011-11-28

引用 8 楼 gengzhikui1111 的回复:

C/C++ code
//: IOSOP.CPP -- Iostream operator overloading
// Example of non-member overload operators
#include <iostream.h>
#include <strstrea.h>
#include <string.h>


class intarray {
enum { sz……

这样就行了。。嘿嘿。。初学者犯的拼写错误

作者: gengzhikui1111   发布时间: 2011-11-28

引用 3 楼 mougaidong 的回复:

C/C++ code
#include <iostream>
#include <sstream>

using namespace std;

class intarray {


public:
const static int sz = 4;

intarray() {
memset( i, 0, sz*sizeof(*i) );
……

你的const static int sz = 4;
是什么意思啊?

作者: gengzhikui1111   发布时间: 2011-11-28