C++模板问题:重载operator<< 15
#include<iostream>usingstd::cerr;usingstd::cout;usingstd::cin;usingstd::endl;usingstd...
#include <iostream>
using std::cerr;
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;
#include <iomanip>
using namespace std;
#ifndef ARRAY_H
#define ARRAY_H
template <typename T>
class Array
{
friend ostream &operator<<( ostream &, Array<T> &);
public:
Array( int = 10 );
T getSize() const;
~Array() { delete [] ptr;}
const Array &operator=(const Array &);
private:
int size;
int *ptr;
};
template <typename T>
ostream & operator<<(ostream &out, Array<T> &a)
{
int i;
for (i=0; i<a.size; i++)
{
out<<setw(12)<<a.ptr[i];
if ( (i+1) % 4 ==0 )
out<<endl;
}
if (i%4 !=0 )
out<<endl;
return out;
}
#include <iostream>
using namespace std;
#include "Array.h"
int main()
{
Array < int > integer(7);
Array < int > integer2(8);
integer=integer2;
cout<<integer;
return 0;
}
省略了一些其他函数。
报出的错误:
error C2248: 'size' : cannot access private member declared in class 'Array<int>'
error C2248: 'ptr' : cannot access private member declared in class 'Array<int>'
我们学院的编译器是VC++6.0
如何解决。
注意,我已经声明为友元了。
致二楼:对不起,结果还是一样。
致二楼:可能我的编译器太旧了,我用的是VC++6.0
请问您用的哪个编译器?
我这里爆出的结果和以前的一样。 展开
using std::cerr;
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;
#include <iomanip>
using namespace std;
#ifndef ARRAY_H
#define ARRAY_H
template <typename T>
class Array
{
friend ostream &operator<<( ostream &, Array<T> &);
public:
Array( int = 10 );
T getSize() const;
~Array() { delete [] ptr;}
const Array &operator=(const Array &);
private:
int size;
int *ptr;
};
template <typename T>
ostream & operator<<(ostream &out, Array<T> &a)
{
int i;
for (i=0; i<a.size; i++)
{
out<<setw(12)<<a.ptr[i];
if ( (i+1) % 4 ==0 )
out<<endl;
}
if (i%4 !=0 )
out<<endl;
return out;
}
#include <iostream>
using namespace std;
#include "Array.h"
int main()
{
Array < int > integer(7);
Array < int > integer2(8);
integer=integer2;
cout<<integer;
return 0;
}
省略了一些其他函数。
报出的错误:
error C2248: 'size' : cannot access private member declared in class 'Array<int>'
error C2248: 'ptr' : cannot access private member declared in class 'Array<int>'
我们学院的编译器是VC++6.0
如何解决。
注意,我已经声明为友元了。
致二楼:对不起,结果还是一样。
致二楼:可能我的编译器太旧了,我用的是VC++6.0
请问您用的哪个编译器?
我这里爆出的结果和以前的一样。 展开
2个回答
展开全部
你访问了私有成员...比如ptr.是私有的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一样是VC6。
编译器版本:
C:\>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
---------------------------------
to 楼主:
不给出完整代码无法给你答案。因为我这边就你现在给的代码片断来看没有任何错误,可以顺利编译(参见下面代码)。
--------------
to楼上:
friend就是用来访问私有成员的。
------------
楼主写法没有问题。
需要注意的是VC6中如果自己写模版类,部分函数的实现需要写在头文件中,特别是友元。
-------------------
测试输出:
0 0 0 0
0 0 0
Press any key to continue
由于给的代码不全,自己随便写了构造函数和等号操作符,调试代码如下(单文件,VC6控制台工程)
-------------------------------
#include <iostream>
using std::cerr;
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;
#include <iomanip>
using namespace std;
template <typename T>
class Array
{
friend ostream &operator<<( ostream &, Array<T> &);
public:
Array( int len = 10 ) {ptr=new int[len]; for(int i=0;i<len;i++) ptr[i]=0; size=len;};
T getSize() const;
~Array() { delete [] ptr;}
const Array &operator=(const Array &a) {return a;};
private:
int size;
int *ptr;
};
template <typename T>
ostream & operator<<(ostream &out, Array<T> &a)
{
int i;
for (i=0; i<a.size; i++)
{
out<<setw(12)<<a.ptr[i];
if ( (i+1) % 4 ==0 )
out<<endl;
}
if (i%4 !=0 )
out<<endl;
return out;
}
int main()
{
Array < int > integer(7);
Array < int > integer2(8);
integer=integer2;
cout<<integer;
return 0;
}
编译器版本:
C:\>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
---------------------------------
to 楼主:
不给出完整代码无法给你答案。因为我这边就你现在给的代码片断来看没有任何错误,可以顺利编译(参见下面代码)。
--------------
to楼上:
friend就是用来访问私有成员的。
------------
楼主写法没有问题。
需要注意的是VC6中如果自己写模版类,部分函数的实现需要写在头文件中,特别是友元。
-------------------
测试输出:
0 0 0 0
0 0 0
Press any key to continue
由于给的代码不全,自己随便写了构造函数和等号操作符,调试代码如下(单文件,VC6控制台工程)
-------------------------------
#include <iostream>
using std::cerr;
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;
#include <iomanip>
using namespace std;
template <typename T>
class Array
{
friend ostream &operator<<( ostream &, Array<T> &);
public:
Array( int len = 10 ) {ptr=new int[len]; for(int i=0;i<len;i++) ptr[i]=0; size=len;};
T getSize() const;
~Array() { delete [] ptr;}
const Array &operator=(const Array &a) {return a;};
private:
int size;
int *ptr;
};
template <typename T>
ostream & operator<<(ostream &out, Array<T> &a)
{
int i;
for (i=0; i<a.size; i++)
{
out<<setw(12)<<a.ptr[i];
if ( (i+1) % 4 ==0 )
out<<endl;
}
if (i%4 !=0 )
out<<endl;
return out;
}
int main()
{
Array < int > integer(7);
Array < int > integer2(8);
integer=integer2;
cout<<integer;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询