2012-09-11 34 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

相关问题