I am trying to simulate inheritance in C, so I created a C file in Visual Studio and wrote some code. I made sure that there were no IntelliSense errors and compiled the code, and it then told me there were over 40 errors. Why didn’t it mention them before? What’s the basic way to get the code to work? (I know some Java, but not much C.)
#include <stdio.h>
#include <string.h>
//Create a manager which should inherit from employee
int main(void)
{
// construct a Manager object
double d = 8000;
char carl[] = "Carl";
Manager boss= newManager(carl, d, 1987, 12, 15);
setBonus(&boss, 5000);
typedef union{ //typedef!?
Employee e;
Manager m;
} Person;
Person staff[3];
// fill the staff array with Manager and Employee objects
staff[0].m = boss;
Employee harry; harry = newEmployee("Harry", 50000, 1989, 10, 1);
staff[1].e=harry;
Employee tommy; tommy = newEmployee("Tommy", 40000, 1990, 3, 15);
staff[2].e = tommy;
// print out information about all Employee objects
int i;
for (i=1;i<3;i++){
//check if employee or manager
Employee em; em = staff[i].e;
printf ("%s\n", em.name);
printf("%s\n", 345);
}
}
typedef struct {
char name[20];
double salary;
} Employee;
Employee newEmployee(char n[], double s, int year, int month, int day)
{
Employee emp;
strncpy(emp.name, n, 20);
emp.salary=s;
return emp;
}
//use pointer to change actual value
void raiseSalary(Employee (*emplo), double byPercent)
{
double raise = (*emplo).salary * byPercent / 100;
(*emplo).salary += raise;
}
//Manager struct inheriting from employee struct
typedef struct {
Employee employee;
int bonus;
} Manager;
Manager newManager(char n[], double s, int year, int month, int day)
{
Manager man;
strncpy(man.employee.name, n, 20);
man.employee.salary = s;
}
double getManagerSalary(Manager man)
{
double basesalary = man.employee.salary;
return basesalary + man.bonus;
}
void setBonus(Manager* man, int b)
{
(*man).bonus = b;
}
The Intellisense for C++ is notoriously unreliable and just because something is or isn’t reported as an error by Intellisense doesn’t really mean much.
Also, whenever you have errors, you have to give us the errors or we most likely won’t be able to help you.
One thing is obvious though: move the definitions of
structs and the prototypes for the functions abovemainso you don’t have a bunch of undefined functions and structures.