我收到一个我无法解释的错误。这是我的头文件:
#include <iostream>
using namespace std;
namespace project
{
#ifndef MATRIX_H
#define MATRIX_H
typedef int* IntArrayPtr;
class Matrix
{
public:
friend ostream& operator<<(ostream& out, const Matrix& object);
friend istream& operator>>(istream& in, Matrix& theArray);
//Default Constructor
Matrix();
Matrix(int max_number_rows, int max_number_cols, int intial_value);
//Destructor
~Matrix();
//Copy Constructor
Matrix(const Matrix& right_side);
//Assignment Operator
Matrix& operator=(const Matrix& right_side);
void Clear();
int Rows();
int Columns();
bool GetCell(int x,int y, int& val);
bool SetCell(int x,int y, int val);
//void Debug(ostream& out);
private:
int initialVal;
int rows;
int cols;
IntArrayPtr *m;
};
#endif
}
在这里我的定义是:
ostream& operator<<(ostream& out, const Matrix& object)
{
for(int r = 0; r < object.rows; r++)
{
for(int c = 0; c < object.cols; c++)
{
out << object.m[r][c] << " ";
}
out << endl;
}
return out;
}
它给了我Matrixh成员无法访问的错误,但我明确表示他们是朋友的功能。
答案 0 :(得分:2)
你的函数实现也应该驻留在project
命名空间中 - 只是声明你正在使用它是不够的,如果你不指定它那么函数本身就是'全局'然后不会能够访问成员,因为它是在错误的命名空间范围内。
答案 1 :(得分:0)
这些功能定义在哪里? friend
声明将名称注入namespace project
。如果未在该命名空间中定义函数,则它们是不同的函数而不是朋友。
答案 2 :(得分:0)
尝试在Matrix类之外定义两个朋友函数。
喜欢:
#include <iostream>
using namespace std;
namespace project
{
#ifndef MATRIX_H
#define MATRIX_H
typedef int* IntArrayPtr;
class Matrix
{
public:
//Default Constructor
Matrix();
Matrix(int max_number_rows, int max_number_cols, int intial_value);
//Destructor
~Matrix();
//Copy Constructor
Matrix(const Matrix& right_side);
//Assignment Operator
Matrix& operator=(const Matrix& right_side);
void Clear();
int Rows();
int Columns();
bool GetCell(int x,int y, int& val);
bool SetCell(int x,int y, int val);
//void Debug(ostream& out);
private:
int initialVal;
int rows;
int cols;
IntArrayPtr *m;
};
ostream& operator<<(ostream& out, const Matrix& object);
istream& operator>>(istream& in, Matrix& theArray);
#endif
}