2012-09-11 35 views
1

編輯#1:編輯一切前行獲得 「使用未定義的類型」 和 「必須有類/結構/聯合」 錯誤

< < 「業主:」 < <(* wo._owner) .getLoginName()< < endl;

工作得很好,或者至少沒有把錯誤拋給我。

所以我有以下代碼(如果需要更多的顯然還有很多,如果要求我將發佈,只是不知道,或者是確定):

class Workout 
{ 
private: 
    int _workoutid; // the ID of this workout 
    User* _owner; // Who did this workout 
    float _distance; // in miles 
    int _duration; // in seconds 
    int _day, _month, _year; // date: MM/DD/YYYY 
    int _weight; // lb, on the date of workout 
    // private methods (if necessary) 
public: 
    friend std::ostream& operator<< (ostream& out, Workout& wo) 
    { 
     out << "Workout ID: " << wo._workoutid << endl 
      << "Owner: " << (*wo._owner).getLoginName() << endl 
      << "Distance: " << wo._distance << endl 
      << "Duration: " << wo._duration/3600 << ":" << (wo._duration % 3600)/60 << ":" << wo._duration % 60 << endl 
      << "Date: " << wo._month << ":" << wo._day << ":" << wo._year << endl 
      << "Weight: " << wo._weight << endl; 
     return out; 
    } 
    // Print workout id, owner’s username, distance 
    // duration (HH:MM:SS), date (MM:DD:YY) and weight of 
    // the workout 
    // and other public methods (mutators/setters, accessors/getters) 
    Workout(void); 
    Workout(int, User*, float, int, int, int, int, int); 
    virtual ~Workout(void); 
    float getDistance(); 
    void setDistance(float); 
}; 
Workout::Workout(void) : _workoutid(), _distance(), _duration(), _day(), _month(), _year(), _weight() 
{ 
    _owner = new User(); 
} 
Workout::Workout(int id, User* user, float distance, int duration, int day, int month, int year, int weight) : 
_workoutid(id), _distance(distance), _duration(duration), _day(day), _month(month), _year(year), _weight (weight), _owner(user) 
{ 
} 
Workout::~Workout(void) 
{ 
    delete [] _owner; 
} 

class User 
{ 
private: 
    char* _firstname; // First name 
    char* _lastname; // Last name 
    char* _loginname; // Login name 
    char* _password; // password 
    Workout* _myWorkouts[50];// an array of pointers to workouts 
    int _numWorkouts; // Num. of workout logged 
    User* _buddies[10]; // Friends 
    int _numBuddies; // Num. of friends 

    // private methods (if necessary) 

public: 
    friend std::ostream& operator<< (ostream& out, User& user) 
    { 
     out << "First Name: [" << user._firstname << "]" << endl 
      << "Last Name: ["<< user._lastname << "]" << endl 
      << "Login Name: [" << user._loginname << "]" << endl 
      << "Number of Workouts: [" << user._numWorkouts << "]" << endl 
      << "Number of Friends: [" << user._numBuddies << "]" << endl; 
     return out; 
    } 
    User(void); 
    User(const char*, const char*, const char*, const char*); 
    virtual ~User(void); 

    char* getPassword(void); 
    char* getLoginName(void); 
    char* getFirstName(void); 
    void addWorkout(Workout*); 
    Workout* getWorkout(int); 
    void addBuddy(User* buddy); 
    // and other public methods (mutators/setters, accessors/getters) 
}; 
User::User(void) : _firstname(), _lastname(), _loginname(), _password(), 
    _myWorkouts(), _numWorkouts(), _buddies(), _numBuddies() 
{ 
} 
User::User(const char* first, const char* last, const char* login, const char* pass) : _myWorkouts(), _numWorkouts(), _buddies(), _numBuddies() 
{ 
    _firstname = new char[20]; 
    _lastname = new char[20]; 
    _loginname = new char[20]; 
    _password = new char[20]; 

    for (int i=0; i < 20; i++){ 
     _firstname[i] = first[i]; 
     _lastname[i] = last[i]; 
     _loginname[i] = login[i]; 
     _password[i] = pass[i]; 
    } 
} 
User::~User(void) 
{ 
    delete [] _firstname; 
    delete [] _lastname; 
    delete [] _loginname; 
    delete [] _password; 

    for(int i=0;i<50;i++) delete _myWorkouts[i]; 
    delete [] _myWorkouts; 

    for(int i=0;i<10;i++) delete _buddies[i]; 
    delete [] _buddies; 

    //What about variables such as _numWorkouts and _numBuddies? 
} 

我正在以下錯誤:

錯誤1個錯誤C2027:使用未定義類型 '用戶'

錯誤2錯誤C2228的:左 '.getLoginName' 必須具有類/結構/聯合

第一個錯誤是因爲運營商< <方法在某種程度上並不想承認該類型用戶的(* wo._owner)對象初始化(它是!) 第二個錯誤,顯然必須進行相關到第二個,但這並沒有提高我實現如何解決問題的機會。

+0

如果您也可以發佈用戶的類(?)定義,它可能有助於提供答案。 – enhzflep

+0

會做。給我一點時間。 – Yokhen

+0

完成,對不起花了1分多鐘。 – Yokhen

回答

3

如果這確實是你的代碼的結構,那麼你在試圖定義之前使用「User」。

你不能這樣做。

如果需要,聲明輸出運算符爲朋友,並在用戶定義已知之後定義它。

+0

你的意思就像是從類定義中取出'ostream&operator <<()'的定義,並把它像構造函數是否定義? – Yokhen

+0

@Yokhen準確。 – juanchopanza

相關問題