为什么我的朋友的功能可以访问公共内容?

时间:2013-03-26 03:55:46

标签: c++ overloading friend

以下是我的代码。我有3个朋友功能:

#include <iostream>
#ifndef   MATRIX_H
#define  MATRIX_H
class Matrix
    {
    friend Matrix operator++(Matrix&);
    friend Matrix operator--(Matrix&);
    friend ostream& operator<<(ostream&, Matrix&);
    private:
        int dim;
        int** mat;
    public:
        Matrix(int d);
        void set(int, int, int);
        int get(int, int);
        Matrix operator+(Matrix&);
        Matrix operator-(Matrix&);
        Matrix operator*(Matrix&);
        ~Matrix();
    };

Matrix operator++(Matrix &m)
    {
    for (int i = 0; i < m.dim; i++)
        {
        for (int j = 0; j < m.dim; j++)
            {
            int val = m.get(i,j);
            m.set(i,j,++val);
            }
        }
    return m;
    }

Matrix operator--(Matrix &m)
    {
    for (int i = 0; i < m.dim; i++)
        {
        for (int j = 0; j < m.dim; j++)
            {
            int val = m.get(i,j);
            m.set(i,j,--val);
            }
        }
    return m;
    }

ostream& operator<<(ostream &os, Matrix &m)
    {
    for (int i = 0; i < m.dim; i++)
        {
        for (int j = 0; j < m.dim; j++)
            {
            os << m.get(i,j) << ' ';
            }
        os<<endl;
        }
    return os;
    }

#endif

关于“m.get(i,j)”并没有抱怨它们,我认为这是一个公共功能......它抱怨“m.dim”,说它不可访问,在运营商&lt; &lt ;,但不是前两个。为什么?

1 个答案:

答案 0 :(得分:1)

您只是忘记在所有位置std::之前添加ostream

friend std::ostream& operator<<(std::ostream&, Matrix&);