我想重載我創建的UserLogin類上的輸入運算符。沒有編譯時錯誤引發,但是值也沒有設置。C++輸入運算符重載
,一切都會運行,但UL的內容仍然是: 字符串ID爲突破口 一次登錄是00:00 註銷時間是00:00
切入點
#include <iostream>
#include "UserLogin.h"
using namespace std;
int main() {
UserLogin ul;
cout << ul << endl; // xxx 00:00 00:00
cin >> ul; // sally 23:56 00:02
cout << ul << endl; // Should show sally 23:56 00:02
// Instead, it shows xxx 00:00 00:00 again
cout << endl;
system("PAUSE");
}
UserLogin.h
#include <iostream>
#include <string>
#include "Time.h"
using namespace std;
class UserLogin
{
// Operator Overloaders
friend ostream &operator <<(ostream &output, const UserLogin user);
friend istream &operator >>(istream &input, const UserLogin &user);
private:
// Private Data Members
Time login, logout;
string id;
public:
// Public Method Prototypes
UserLogin() : id("xxx") {};
UserLogin(string id, Time login, Time logout) : id(id), login(login), logout(logout) {};
};
UserLogin.cpp
#include "UserLogin.h"
ostream &operator <<(ostream &output, const UserLogin user)
{
output << setfill(' ');
output << setw(15) << left << user.id << user.login << " " << user.logout;
return output;
}
istream &operator >>(istream &input, const UserLogin &user)
{
input >> (string) user.id;
input >> (Time) user.login;
input >> (Time) user.logout;
return input;
}
你確定這是代碼? 'friend istream'操作符需要一個const引用,但讀入對象不能是一個const操作。 – juanchopanza
@juanchopanza是的,但在輸入操作符中使用的表達式意味着OP不讀入對象,而是讀入臨時對象(可能在VC上,以便臨時對象可以綁定到內置的非>>非常量引用) 。 – Angew