我有類目錄當中做的東西與類文件的對象,重載運營商,像這樣的權利:程序不調用重載操作
class Directory
{
std::vector<char> name, timeOfCreation;
std::vector<File> arr;
public:
Directory(std::string);
Directory(const Directory&);
~Directory();
Directory operator += (File);
Directory operator += (Directory);
Directory operator -= (File);
Directory operator ~();
File operator [] (int);
operator int();
friend bool operator % (Directory, File);
friend bool operator % (Directory, Directory);
friend Directory operator + (Directory, Directory);
friend Directory operator - (Directory, Directory);
friend long int operator + (Directory);
friend std::ofstream& operator << (std::ofstream&, Directory);
friend void main();
};
好了,現在的問題出現時,在主,我有
void main()
{
//make object of Directory d
std::cout << d;
}
程序現在調用操作INT(),而不是運營商< <。因此,命令 std::cout <<d
行爲像std::cout << (int)d
,它在我的目錄中寫入了文件的數量。
下面是運營商< <和int()函數的實現:
Directory::operator int()
{
return (int)arr.size();
}
std::ofstream& operator << (std::ofstream& out, Directory d)
{
// get the max field widths for three fields
int widthLeft = 0, widthMiddle = 0, widthRight = 10;
std::vector<File>::const_iterator i = d.arr.begin();
for(; i < d.arr.end(); ++i)
{
if((int)d.timeOfCreation.size() > widthLeft)
widthLeft = (int)d.timeOfCreation.size();
if((int)d.name.size() > widthMiddle)
widthMiddle = (int)d.name.size();
}
out<<std::setw(widthLeft)<<"Date & Time of creation";
out<<std::setw(widthMiddle)<<"Name";
out<<std::setw(widthRight)<<"Total Size\n";
return out;
}
注:操作員< <還沒有完成,我只是測試運輸及工務局局長的功能,但它仍然應該寫出一條線。
你有沒有命名空間? 'operator <<'定義在哪裏?爲什麼你首先有一個轉換運算符爲'int'? –