עזרה ב ++C‏

עזרה ב ++C‏

אני חדש ב ++ C‏‏. ונעזר בספר ++ C‏‏ כשפת אם של יצחק גרבר. ומתקשה ביצירת פונקציה בונה לחישוב שכר.
//main.cpp
#include <iostream>
#include "Portfolio.h"
#include<conio.h>

#define SIZE 2
#define OVER_TIME 1.5

using namespace std;

int main()
{
int i;
Portfolio worker[SIZE];
for(i=0;i<SIZE;i++)
worker.Portfolio(id, hourlySalary, totalHours, overTime);
for(i=0;i<SIZE;i++)
cout<<setw(10)<<worker.salaryCalculation(hourlySalary, totalHours, overTime);
getch();
return 0;
}

//Portfolio.h
#ifndef PORTFOLIO_H_INCLUDED
#define PORTFOLIO_H_INCLUDED

class Portfolio{
int id;
float hourlySalary, // שכר לשעה
totalHours, // סך שעות יסוד
overTime;// שעות נוספות
public:
Portfolio(int id, float hourlySalary, float totalHours, float overTime);// פונקציה בונה
float salaryCalculation(float hourlySalary, float totalHours, float overTime);// חישוב שכר
};

#endif // PORTFOLIO_H_INCLUDED

//Portfolio.cpp
#include "Portfolio.h"

inline Portfolio::portfolio(int id, float hourlySalary, float totalHours, float overTime)
{
while(!id)
{
cout<<"Enter id";
cin>>id;
}

while(!hourlySalary)
{
cout<<"Enter hourly Salary";
cin>>hourlySalary;
}

while(!totalHours)
{
cout<<"Enter total Hours";
cin>>totalHours;
}

while(!overtime)
{
cout<<"Enter over Time";
cin>>overTime;
}
}

inline float salaryCalculation(float hourlySalary, float totalHours, float overTime)
{
float sum;
return sum=(hourlySalary*totalHours)+(hourlySalary*overTime*OVER_TIME);
}

השגיאות המתקבלות

\Portfolio\main.cpp||In function 'int main()':|
\Portfolio\main.cpp|13|error: no matching function for call to 'Portfolio::portfolio()'|
\Portfolio\Portfolio.h|10|note: candidates are: Portfolio::portfolio(int, float, float, float)|
\Portfolio\Portfolio.h|4|note: Portfolio::portfolio(const Portfolio&)|
\Portfolio\main.cpp|15|error: invalid use of 'class Portfolio'|
\Portfolio\main.cpp|15|error: 'id' was not declared in this scope|
\Portfolio\main.cpp|15|error: 'hourlySalary' was not declared in this scope|
\Portfolio\main.cpp|15|error: 'totalHours' was not declared in this scope|
\Portfolio\main.cpp|15|error: 'overTime' was not declared in this scope|
\Portfolio\main.cpp|17|error: 'setw' was not declared in this scope|
\Portfolio\main.cpp|17|error: 'hourlySalary' was not declared in this scope|
\Portfolio\main.cpp|17|error: 'totalHours' was not declared in this scope|
\Portfolio\main.cpp|17|error: 'overTime' was not declared in this scope|
||=== Build finished: 10 errors, 0 warnings ===|

מה הבעיה בתוכנית?
תודה למשיבים.
 
When you call Portfolio worker[SIZE]; you're

calling the parameterless constructor of Portfolio - which does not exist.
Add Portfolio::portfolio() {}
||
Make your array contain pointers
||
Use an stl::vector instead of static array
||
Explicitly give input parameters, as in:
Portfolio worker[2] { {0,1,2,3}, {4, 5, 6, 7} };
 
מצטער, לא הבנתי.

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

נתקלתי בטעות בספר בחנות יד-שניה. במחיר 30 שח.
ולמרות שמלכתחילה לא הייתי מעוניין בלימוד ++C, אך מאחר וקניתי את הספר לא הזיק להתנסות בו. ויחסית, ההסברים בספר דיי פשוטים. חוץ מזה שבתוכנית שלי חרגתי מהדוגמאות שהובאו בספר, בזה שהשתמשתי במערך של מבנים. ובמקום לאתחל אותם ישירות, ביצעתי קלט בתוך הפונקציה הבונה. כך שאין לתלות חיסרון זה במחבר.

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

אגב
באתר שקישרת אליו לא מצאתי התייחסות לבעיה שלי. וגם שם אין הסבר על אופן איתחול המבנה באמצעות קלט מתוך הפונקציה הבונה.

אם כבר מדברים על ספרים.
מה דעתך על מדריך לשפת ++C?
או על למד ויז'ואל ++C עכשיו?
 
האתר שנתתי לך מסביר את העקרונות של C++

כמו שצריך, כמו כן, התוכנית שכתבת היא ברדק אחד גדול.
וממתי שמים constructor בצורת inline?

את האמת שכבר שנים לא כתבתי בC++
אני ממליץ על ג'אווה.
 

selalerer

New member
כמה דברים שאני רואה.

* אתה יוצר מערך בלי לאתחל אותו. כבר בשורה הזו הוקמפיילר מנסה ליצור את האובייקטים במערך. הוא לא מחכה ל-for שלך שבא אח"כ. הוא מנסה ליצור אותם בעזרת constructor בלי פרמטרים (כי לא נתת פרמטרים בשורה הזו) אבל אין כזה constructor למחלקה Portfolio.

* ב-for הראשון אתה קורא ל-constructor. אסור לעשות את זה ב-++C. ה-constructor נקרא אוטומאטית ע"י הקומפיילר כשאתה יוצר אובייקט. אתה לא יכול לקרוא לו בעצמך בקוד.

* גם ב-for הראשון וגם בשני אתה משתמש במשתנים שיש להם את אותם השמות כמו חברי המחלקה של Portfolio אבל לא הגדרת אותם בשום מקום. המקום היחיד שאפשר להשתמש בשמות האלו הוא בתוך המחלקה Portfolio.

* בקובץ cpp השתמשת במילה inline. אסור לעשות את זה. אתה עדיין לא קיבלת את הטעויות על זה מכיוון שלא עברת קומפילציה בהצלחה ולכן לא הגעת לשלב ה-link, אבל כשתגיע זה יכשל בגלל ה-inline.
 
למעלה