01/10/2018, 12:17

Code gặp lỗi ở phần cấp phát động, mong mọi người giúp đỡ

Hello , mình đang bắt đầu học về OOP c++ và đang tới học class và mảng đối tượng .
Mình đang viết một chương trình khai báo thông tin nhân viên đơn giản thì mình gặp lỗi ở phần cấp phát bộ nhớ cho con trỏ đối tượng, nó báo error: no matching function for call to 'Employee::Employee()' , mình có xem qua phần cấp phát động thì không biết nó sai như thế nào nữa , mong mọi người giúp mình với .
Đây là code của mình

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
class Employee
{
private:
    char *name;
    int age;
    double salary;
public:
    Employee(char *namez,int agez,double salaryz);
    void show();
    void set_name(char *namez) /// gán tên nhân viên
    {
        strcpy(name,namez);
    }
    char get_name()
    {
        return *name;
    }
    void set_age(int agez) /// gán tuổi
    {
        age = agez;
    }
    int get_age()
    {
        return age;
    }
    void set_salary(double salaryz) /// gán  lương
    {
        salary = salaryz;
    }
    double get_salary()
    {
        return salary;
    }
    /// giải phóng
     ~Employee()
    {
    cout << "Freeing... " << endl;
    }
};
Employee::Employee(char *namez,int agez,double salaryz)
{
    strcpy(name,namez);
    age = agez;
    salary = salaryz;
}
void Employee::show()
{
    cout << endl;
    cout << "Name: " << name << endl;
    cout << "Age: " << age << endl;
    cout << "Salary: " << salary << endl;
    cout << endl;
}
int main()
{
    int agey = 0,length;
    double salaryy = 0;
    char *namey;
    Employee *emp;
    cout << "Enter the number Employees: " << endl;
    cin >> length;
    /// cấp phát động
    emp = new Employee[length];
    /// nhập thông tin nhân viện
    for(int i = 0;i<length;i++)
    {
        cout << "Enter info Employee " << i+1 << endl;
        cout << "Enter name: ";
        fflush(stdin);
        cin.getline(namey,20);
        emp[i].set_name(namey);

        cout << "Enter age: ";
        fflush(stdin);
        cin >> agey;
        emp[i].set_age(agey);

        cout << "Enter Salary: ";
        fflush(stdin);
        cin >> salaryy;
        emp[i].set_salary(salaryy);
    }
    for(int i = 0;i<length;i++)
    {
        cout << "Info Employees " << i+1 << endl;
        emp[i].show();
        cout << endl;
    }
    delete emp;
    return 0;
}
Khoa NTA viết 14:30 ngày 01/10/2018

Lỗi ở chỗ này :v

emp = new Employee[length];

Bạn gọi contructor Employee() mà không khai báo constructor Employee(void) mà chỉ khai báo Employee(char *, int, double) thôi nên nó bảo là không có hàm đó là đúng rồi.

Giải pháp: thêm vào Employee() {} trong public là xong!
Lưu ý: các biến con trỏ (kiểu chuỗi) của bạn chưa được cấp phát vùng nhớ nên chương trình sẽ tiếp tục crash khi chạy!

Hoài Nam Trương viết 14:25 ngày 01/10/2018

Vậy là mình chỉ cần thêm 1 hàm ko tham số tại class employee vs cấp phát động là được phải ko bạn?

Khoa NTA viết 14:24 ngày 01/10/2018

Nó đó <twenty_chars>

Bài liên quan
0