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;
}
Bài liên quan
Lỗi ở chỗ này :v
Bạn gọi contructor
Employee()
mà không khai báo constructorEmployee(void)
mà chỉ khai báoEmployee(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() {}
trongpublic
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!
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?
Nó đó <twenty_chars>