I am new to C++. I am from Java background. I have two classes called SalesPerson and SalesPeople.
I want to create an array of SalesPerson in SalesPeople class. Below is my program and I get some compilation errors.
#include <iostream>
using namespace std;
class SalesPerson {
private:
string name;
static const int MONTHS = 12;
double salesPerMonthArray[MONTHS];
public:
SalesPerson(string name, double salesPerMonthArray[]) {
this->name = name;
for(int i = 0; i < MONTHS; i++) {
this->salesPerMonthArray[i] = salesPerMonthArray[i];
}
}
string getName() {
return name;
}
double getSalesForAMonth(int month) {
if(month < MONTHS) {
return salesPerMonthArray[month];
}
return salesPerMonthArray[0];
}
double computeAnnualSales() {
double annualSales = 0.0;
for(int i = 0; i < MONTHS; i++) {
annualSales += salesPerMonthArray[i];
}
return annualSales;
}
};
class SalesPeople {
private:
int index = 0;
SalesPerson salesPersonArray[10];
public:
void addSalesPerson(SalesPerson salesPerson) {
salesPersonArray[index] = salesPerson;
index++;
}
SalesPerson getSalesPerson(int index) {
return salesPersonArray[index];
}
};
int main() {
double salesArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
SalesPeople salesPeople;
SalesPerson salesPerson1("yaswanth", salesArray);
salesPeople.addSalesPerson(salesPerson1);
return 0;
}
Compilation errors:
prog.cpp: In function ‘int main()’:
prog.cpp:65:14: error: use of deleted function ‘SalesPeople::SalesPeople()’
SalesPeople salesPeople;
^
prog.cpp:44:7: note: ‘SalesPeople::SalesPeople()’ is implicitly deleted because the default definition would be ill-formed:
class SalesPeople {
^
prog.cpp:44:7: error: no matching function for call to ‘SalesPerson::SalesPerson()’
prog.cpp:44:7: note: candidates are:
prog.cpp:12:2: note: SalesPerson::SalesPerson(std::string, double*)
SalesPerson(string name, double salesPerMonthArray[]) {
^
prog.cpp:12:2: note: candidate expects 2 arguments, 0 provided
prog.cpp:4:7: note: SalesPerson::SalesPerson(const SalesPerson&)
class SalesPerson {
^
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided
prog.cpp:4:7: note: SalesPerson::SalesPerson(SalesPerson&&)
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided
Then I tried to create an empty constructor and I got the below error.
prog.cpp: In constructor ‘SalesPeople::SalesPeople()’:
prog.cpp:51:17: error: no matching function for call to ‘SalesPerson::SalesPerson()’
SalesPeople() {
^
prog.cpp:51:17: note: candidates are:
prog.cpp:12:2: note: SalesPerson::SalesPerson(std::string, double*)
SalesPerson(string name, double salesPerMonthArray[]) {
^
prog.cpp:12:2: note: candidate expects 2 arguments, 0 provided
prog.cpp:4:7: note: SalesPerson::SalesPerson(const SalesPerson&)
class SalesPerson {
^
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided
prog.cpp:4:7: note: SalesPerson::SalesPerson(SalesPerson&&)
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided
prog.cpp: In constructor ‘SalesPeople::SalesPeople()’:
prog.cpp:51:17: error: no matching function for call to ‘SalesPerson::SalesPerson()’
SalesPeople() {
^
prog.cpp:51:17: note: candidates are:
prog.cpp:12:2: note: SalesPerson::SalesPerson(std::string, double*)
SalesPerson(string name, double salesPerMonthArray[]) {
^
prog.cpp:12:2: note: candidate expects 2 arguments, 0 provided
prog.cpp:4:7: note: SalesPerson::SalesPerson(const SalesPerson&)
class SalesPerson {
^
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided
prog.cpp:4:7: note: SalesPerson::SalesPerson(SalesPerson&&)
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided
How can I create an array of user defined objects in C++?
MyObjectwithMyObject arr[10], you are creating an array ofMyObjects. C++ uses values extensively. Just like creating anint arr[10]in Java would actually create 10 ints.SalesPeople, there isn't one. Either create one appropriately, or create a default constructor forSalesPersonso that the compiler generated one forSalesPeopleis well defined. Simply addingSalesPerson() {}toSalesPersonwill get it to compile, but it may need more work for what you want.std::vectormay be a better idea.