Я написал следующий класс employee
:
#include<iostream>
#include<string>
using namespace std;
class employee
{
private:
int id;
int salaries[12];
int annualS;
string name;
public:
employee(int id2, string name2, int array[12])
{
id = id2;
name=name2;
salaries = array; //here where the error occurred.
}
~employee()
{
cout<<"Object Destructed";
}
employee()
{
id = 0;
name="Mhammad";
}
int annulalSalary()
{
for( int i=0; i<12; i++)
{
annualS+=salaries[i];
}
return annualS;
}
int tax()
{
return (annualS*10/100);
}
};
void main()
{
int salaries[12];
for(int i=0; i<12; i++)
{
cin>>salaries[i];
}
employee Mohammad(10,"Mohammad",salaries);
cout<< Mohammad.annulalSalary();
cout<< Mohammad.tax();
}
... но когда я его компилирую, компилятор возвращает следующую ошибку:
cannot convert from 'int []' to 'int [12]'
Может ли кто-нибудь помочь мне решить эту проблему?
Вместо массива C используйте [ std::array<>
] C++, например:
class employee {
//...
std::array<int, 12> salaries;
//...
};
и, конечно же, вы должны включить <array>
. И объявите конструктор следующим образом:
employee(int id2, string name2, std::array<int, 12> const & array)
{
//...
}
(или отбросить const &
если вы не уверены, что они или не нуждаются в них).
Вы не можете копировать массивы по заданию. Вам нужно скопировать каждый элемент по отдельности. Используйте std::copy
.
std::copy(array, array+12, salaries);
Или используйте std::vector<int>
или std::array<int, 12>
как это предлагает Borgleader, который копирует по заданию.
std::size_t
.
Используйте векторный класс!
Но для решения вашей проблемы:
int salaries[12]
должен быть int* salaries
employee(int id2, string name2, int array[12])
должен быть employee(int id2, string name2, int* array)
но тогда у вас могут возникнуть проблемы со ссылкой на вещи вне выделенной памяти и segfault. ИСПОЛЬЗУЙТЕ ВЕКТОРЫ!
вы не можете скопировать весь массив, используя оператор = в c++. у вас есть два варианта.
используйте цикл for, подобный этому, для копирования каждого элемента из одного массива в другой
for (int я = 0; я <12; i++) зарплаты [i] = array [i];
на другой ноте не используйте магические числа, такие как 12 в вашем коде.
std::array<T>
илиstd::vector<T>
, у них естьoperator=
перегружен (среди прочего), что означает, что вам не нужно писать код присваивания самостоятельно.int* salaries
. Но да, вы должны использовать вектор <T>, гораздо лучше и безопаснее