עבור לתוכן

C++ OOP , בעיה מוזרה באוביקט

Featured Replies

פורסם

האוביקט בקובץ טקסט

והנה הטעות שהוא כותב לי

--------------------Configuration: meir - Win32 Debug--------------------
Compiling...
driver.cpp
E:\doc\meir\driver.cpp(12) : error C2629: unexpected 'class driver ('
E:\doc\meir\driver.cpp(12) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Error executing cl.exe.

driver.obj - 2 error(s), 0 warning(s)

[attachment deleted by admin]

פורסם

ומה הקוד?

פורסם
  • מחבר

הקוד בקובץ טקסט

מה לא מובן

הנה הוא במכה יש בעיה אבל עם העיברית אז אל תשימו לב


#include <conio.h>

class driver // äâãøä ùì äîçì÷ä ðäâ
{
protected: // àæåø îåâï , ø÷ îçì÷åú éåøùåú éëåìåú ìâùú àìéå
char name[30]; // ùí ðäâ, èéôåñ úååé
int id; // îñ' ðäâ, ùìí
int selphone; // îñ èìôåï
public:
driver (char[] name , int id , int selphone)// ÷åðñèø÷èåø ðäâ
{
driver::name = name ;
driver::id = id;
driver::selphone = selphone;
}

driver () // ÷åðñèø÷èåø ðäâ
{
driver::name = "meir" ;
driver::id = 0;
driver::selphone = 0;
}


char getName() // îçæéø ùí ðäâ
{ return name; }

int getID() // îçæéø îñ ðäâ
{ return id; }

int getSelphone() //îçæéø èìôåï ðäâ
{ return selphone;}
};

פורסם

תנסה במקום ה::driver לשים this->.

ויש לך שם בעיה. אתה לא יכול לעשות = לNAME. אתה חייב להשתמש בstrcpy.

לדוגמא:

strcpy(this->name, name);

כמו כן, אתה חייב להכיל את הספרייהstring.h.

וב- getname אתה לא יכול להחזיר איך שאתה מחזיר עכשיו.

ובCTOP התבלבלת קצת. אתה רצית לעשות char *name או char name[]?

בגדול זה אותו דבר(אם מישהו יראה שרשמתי את זה כאן הוא יכעס מאוד).

פורסם

תנסה במקום ה::driver לשים this->.

ויש לך שם בעיה. אתה לא יכול לעשות = לNAME. אתה חייב להשתמש בstrcpy.

לדוגמא:

strcpy(this->name, name);

כמו כן, אתה חייב להכיל את הספרייהstring.h.

וב- getname אתה לא יכול להחזיר איך שאתה מחזיר עכשיו.

ובCTOP התבלבלת קצת. אתה רצית לעשות char *name או char name[]?

בגדול זה אותו דבר(אם מישהו יראה שרשמתי את זה כאן הוא יכעס מאוד).

נראה לי שאתה מתבלבל עם PHP לגבי הקטע עם ה<- בCPP האופרטור הזה משמש כאשר משתמשים במצביע לאובייקט.

לגבי מה שאמרת על ה* וה[] - כעקרון יותר יפה לכתוב * אבל זה לא משנה כי הקומפיילר מתרגם את ה[] ל*.

ולכותב ההודעה - פלאפון באנגלית כותבים כך cellphone ולא selphone. כמו כן, טעות נפוצה לשמור טלפון\פלאפון

במשתנה מסוג int, הכי טוב זה במחרוזת.

הנה הקוד המתוקן למחלקה שלך:


#include <string.h>

class driver {
private:
char name[30];
char cellphone[10];
int id;

public:
driver(char* _name , int _id , char* _cellphone) {
strcpy(name,_name);
id = _id;
strcpy(cellphone,_cellphone);
}

driver() {
strcpy(name,"Meir");
id = 0;
strcpy(cellphone,"0");
}

char* getName();
int getID();
char* getCellphone();
};


char* driver::getName() {
return name;
}

int driver::getID(){
return id;
}

char* driver::getCellphone(){
return cellphone;
}

פורסם

המצביע this קיים גם בC++, והוא מצביע לאובייקט שאתה קראת למתודה שלו, בתוך המתודה עצמה.

עריכה: במקום ליצור מחלקה, אתה יכול ליצור STRUCT בC, ולשלוח לפונ מסויימות מצביע לסוג הSTRUCT שלך, וזה בעצם אותו דבר.

פורסם

זה שזה קיים עדיין לא אומר שצריך להשתמש בו.

לגבי מה שאמרת על הstruct - כן, זה כביכול שאתה כותב מחלקה אז הקומפיילר מתרגם את זה ל this-> בכל מקום שיש קריאה.

פורסם

ברור שצריך להשתמש במצביע this גם כדי שאם משהו יקרא את התוכנית אחר כך יהיה לו ברור למי שייכים משתנים ומי מפעיל מתודות, וגם אם למשל כותבים אופרטור = או כל אופרטור דומה כדי לאפר שרשור של פעולות צריך להחזיר בסוף this*

פורסם

עריכה: במקום ליצור מחלקה, אתה יכול ליצור STRUCT בC, ולשלוח לפונ מסויימות מצביע לסוג הSTRUCT שלך, וזה בעצם אותו דבר.

וגם אפשר לכתוב הכל באסמבלי.

אבל זה יהיה טיפשי.

אם כבר נותנים לנו קלאסים ב-C++, אז למה להשתמש בשיטות המיושנות?

פורסם

נתתי רק לשם השוואה, שיבין למה ה-this משמש.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים