מדוע לא מתקמפל

  • פותח הנושא andav
  • פורסם בתאריך

andav

New member
מדוע לא מתקמפל

תודה רבה:
#include <iostream> class worker { long int id; short int payment_for_hour; short int hours_in_work; short int additional_hours; public: worker(); }; worker::worker() { cout << "david" ; } //#include "worker.h" //#include <iostream> int main() { worker one; return 0; }​
 

melatonin

New member
אתה יודע

אתה יכול לעשות את המינימום של להוסיף את הודעת השגיאה של הקומפיילר...
 

andav

New member
צודק ,הנה:

C:/WINDOWS/Desktop/worker.cpp: In constructor `worker::worker()': C:/WINDOWS/Desktop/worker.cpp:16: error: `cout' undeclared (first use this function) C:/WINDOWS/Desktop/worker.cpp:16: error: (Each undeclared identifier is reported only once for each function it appears in.) C:/WINDOWS/Desktop/worker.cpp:26:2: warning: no newline at end of file Execution terminated​
 

ilankt

New member
הממ

אני חושב שאם אתה עושה include ל iostream (בלי .h) אז אתה צריך להוסיף using namespace std;
 

andav

New member
ואתה,אכן צודק,תוכל להסביר(בקצרה)

את הרעיון של ה- using namespace std ?
 

andav

New member
כן,גם אני החלטתי לחפש בגוגל (-:

הבנתי את הרעיון בכללי(אני חושב(-:). אגב,יש אפשרות(מפגרת,יש לומר,או שלא) ,במקום לכתוב בהתחלה:
using namespace std:​
לכתוב ככה:
std::cout "david" ;​
בעצם,אני לא מבין משהו,למה אני צריך גם את ה- iostream וגם את ה- namespace,למה ה- namespace התקני(std) כולל כבר את ה- iostream. בקיצור,אני קצת מבולבל.
 

andav

New member
השאלה שלי לא נכונה.

תיקון: למה אני צריך גם את ה- iostream וגם את ה- namespace,למה ה- namespace התקני(std)לא כולל כבר את ה- iostream. בקיצור,אני קצת מבולבל.
 

ahab

New member
namespaces

כל הפונקציות ב-iostream (ובשאר הקבצים הסטנדרטיים) מוגדרות בתוך ה-namespace שנקרא std. std אינו default namespace של התוכניות שאתה כותב. מבחינה זו, אין הבדל בינו לבין כל namespace אחר שתכתוב. אם אתה רוצה להשתמש בו, אתה חייב לומר זאת בצורה מפורשת (בעזרת using או בעזרת ה-scope operator).
 

andav

New member
את זה אני מבין,תודה

אבל,לא ברור לי אם ב- std גסר מוגדרות כל המחלקות,מדוע אני צריך לשים את iostream גם,אם הוא (כביכול) מוגדר כבר? תודה
 

ahab

New member
עדיין לא הבנת בדיוק

using namespace std בסך הכל אומר שאם לא אמרת אחרת, הקומפיילר צריך לחפש את הפונקציות בהן אתה משתמש ב-namespace שנקראstd. include זה דבר שונה לגמרי. include בסך הכל מכניס הגדרות מקובץ מסוים לתוך הקוד שלך. בקובץ iostream ישנן הגדרות של, בין השאר, המחלקה ostream, ושל האובייקט cout (אובייקט מאותה מחלקה). כלומר, ללא קובץ זה, הקומפיילר בכלל לא יכיר את המחלקה הזו. עם זאת, על מנת לשמור על סדר מסוים, החליטו שהמחלקות הסטנדרטיות ב-++C לא יהיו ב-namespace הגלובלי (ה-default namespace), אלא שהן יוגדרו בתוך namespace שנקרא std. namespaces אינם קשורים לקבצים. אתה יכול להגדיר מספר namespaces בתוך קובץ, ואתה יכול להגדיר namespace שמשתרע על פני מספר קבצים. לסיכום, לאחר שעשית include ל-iostream, הקומפיילר יכיר את האובייקט std::cout, ותוכל להשתמש בו (בשם הזה). על מנת לחסוך ממך לכתוב ::std בכל פעם, אתה יכול להשתמש ב-using.
 
למעלה