我需要重載操作符[]和「=」爲包含文件爲文件中寫入到位置的類。 例如該代碼應工作:重載操作「=」並[]爲文件中的寫入到位置
UserFileClass File;
printf("%c",File[53]); //printing character from the 53 position in the file
File[34]='d'; //34th character in the file will be rewriten with d
但如何做到這一點,如果超載[]返回一個char之後,我們不能覆蓋在「=」操作對象什麼。我試圖做的是,在其他的方式,但它並沒有太多的工作:
#include <iostream>
#include <fstream>
using namespace std;
class File
{
fstream file;
char buffer;
int charPos;
public:
File(string fileName);
~File(){file.close();};
File & operator[](int position);
File & operator=(const char &);
friend ostream & operator<<(ostream,File);
};
File::File(string fileName)
{
file.open(fileName);
if(!file)
{
cerr<<"File reading error";
exit(1);
}
}
ostream & operator<<(ostream outStream, File obj)
{
outStream<<obj.buffer;
return outStream;
}
File & File::operator[](int position)
{
file.seekg(position);
if(file.eof())
{
buffer='\0';
}
else
{
file.read(&buffer,1);
charPos=position;
}
return *this;
}
File & File::operator=(const char & charValue)
{
file.seekg(charPos);
file.write(&charValue,1);
return *this;
}
void main()
{
File userFile("file.txt");
cout<<userFile[2];
userFile[4]='a';
}
編譯錯誤:錯誤2錯誤C2248:標準:: basic_ios < _Elem,_Traits> :: basic_ios:不能訪問私有成員..
'的std :: ostream' ISN不可複製。 – chris
'printf'是C,而不是C++。 –
outStream << obj.buffer;在這裏,你正在訪問私有成員「緩衝」 ......寫一個getter緩衝區 – Nik