我是c ++的新手,仍然试图用构造函数等来掌握类实现。
我有一个程序分为3个文件,一个头文件,一个类实现文件和驱动文件。
在头文件中,我得到一个错误“缺少显式类型(假定为'int')这行代码的操作符<<(ostream&,ARRAY&);
在我的类实现文件中,我收到此朋友函数的错误,说我无法访问私有成员。
在我的驱动程序文件中,我收到错误“无法确定哪个实例重载函数'endl'意图”用于此代码:cout<
我将留下下面的一些代码,首先是.h文件,然后是类实现文件,然后是驱动程序文件。 非常感谢任何帮助清理它。
标题
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class ARRAY
{
public:
ARRAY();
ARRAY(int );
ARRAY(const ARRAY &);
~ARRAY();
friend operator<<(ostream &, ARRAY &);
private:
string *DB;
int count;
int capacity;
};
实施档案
#include "array.h"
ARRAY::ARRAY()
{
cout<<"Default Constructor has been called\n";
count = 0;
capacity = 2;
DB = new string[capacity];
}
ARRAY::ARRAY(int no_of_cells)
{
cout<<"Explicit-Value Constructor has been called\n";
count = 0;
capacity = no_of_cells;
DB = new string[capacity];
}
ARRAY::ARRAY(const ARRAY & Original)
{
cout<<"The copy constructor has been invoked\n";
count = Original.count;
capacity = Original.capacity;
DB = new string[capacity];
for(int i=0; i<count; i++)
{
DB[i] =Original.DB[i];
}
}
inline ARRAY::~ARRAY()
{
cout<<"Destructor Called\n";
delete [ ] DB;
}
ostream & operator<<(ostream & out, ARRAY & Original)
{
for(int i=0; i< Original.count; i++)
{
out<<"DB[" << i <<"] = "<< Original.DB[i]<<endl;
}
return out;
}
驱动程序文件
#include <iostream>
#include <string>
#include "array.h"
using namespace std;
int main()
{
cout<<"invoking the default constructor (11)"<<endl;
ARRAY myArray;
cout<<"Output after default constructor called\n";
cout<<myArray<<endl<<endl;
cout<<"invoking the explicit-value constructor (12)"<<endl;
ARRAY yourArray(5);
cout<<"Output after explicit-value constructor called\n";
//cout<<yourArray<<endl<<endl;
cout<<"invoking the copy constructor (3)"<<endl;
ARRAY ourArray = myArray;
cout<<"Output after copyconstructor called\n";
cout<<ourArray<<endl<<endl;
return 0;
}
答案 0 :(得分:4)
您没有退回返回类型:
friend ostream& operator<<(ostream &, ARRAY &);
答案 1 :(得分:0)
You left off the return type:
friend ostream& operator<<(ostream &, ARRAY &);
您也从
中删除了inline
inline ARRAY::~ARRAY()
{
cout<<"Destructor Called\n";
delete [ ] DB;
}
是
ARRAY::~ARRAY()
{
cout<<"Destructor Called\n";
delete [ ] DB;
}