c ++ массив для присвоения массива

0

Я написал следующий класс 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]'

Может ли кто-нибудь помочь мне решить эту проблему?

  • 5
    Используйте std::array<T> или std::vector<T> , у них есть operator= перегружен (среди прочего), что означает, что вам не нужно писать код присваивания самостоятельно.
  • 0
    проблема в аргументе вашего конструктора. зарплаты не могут быть объявлены размером 12. Вместо этого используйте int* salaries . Но да, вы должны использовать вектор <T>, гораздо лучше и безопаснее
Теги:
arrays

4 ответа

0

Вместо массива C используйте [ std::array<> ] C++, например:

class employee {
    //...
    std::array<int, 12> salaries;
    //...
};

и, конечно же, вы должны включить <array>. И объявите конструктор следующим образом:

employee(int id2, string name2, std::array<int, 12> const & array)
{
    //...
}

(или отбросить const & если вы не уверены, что они или не нуждаются в них).

0

Вы не можете копировать массивы по заданию. Вам нужно скопировать каждый элемент по отдельности. Используйте std::copy.

std::copy(array, array+12, salaries);

Или используйте std::vector<int> или std::array<int, 12> как это предлагает Borgleader, который копирует по заданию.

  • 0
    @ Jarod42 Спасибо. Забыли параметр std::size_t .
0

Используйте векторный класс!

Но для решения вашей проблемы:

int salaries[12] должен быть int* salaries employee(int id2, string name2, int array[12]) должен быть employee(int id2, string name2, int* array)

но тогда у вас могут возникнуть проблемы со ссылкой на вещи вне выделенной памяти и segfault. ИСПОЛЬЗУЙТЕ ВЕКТОРЫ!

0

вы не можете скопировать весь массив, используя оператор = в c++. у вас есть два варианта.

  1. перегрузка = оператор или
  2. используйте цикл for, подобный этому, для копирования каждого элемента из одного массива в другой

    for (int я = 0; я <12; i++) зарплаты [i] = array [i];

на другой ноте не используйте магические числа, такие как 12 в вашем коде.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню