2014-12-19 2 views
0

Я новичок в C++ и практикую использование вектора в качестве объекта. Однако при попытке запустить следующую программу я получил сообщение об ошибке «Нет соответствующего конструктора для инициализации Employee». Скажите, пожалуйста, как я могу изменить свою программу!C++ «Нет подходящего конструктора для инициализации Employee»

Также, когда я пишу сотрудников [0] = Сотрудник {«Гарри Поттер» 55000}; это означает, что я храню строку и двойные данные в одном из 10 открытых ящиков в векторном объекте типа Employee?

Приносим извинения за такой базовый вопрос. Большое вам спасибо!

#include<iostream> 
#include<string> 
#include<vector> 

using namespace std; 

class Employee 
{ 
    public: 
     Employee(string, double); 
     double get_salaries(); 
     string get_name(); 
     void set_salaries(double); 
    private: 
     string name; 
     double salaries; 
}; 
Employee::Employee(string n, double s) 
{ 
    name = n; 
    salaries = s; 
} 
double Employee::get_salaries() 
{ 
    return salaries; 
} 
string Employee::get_name() 
{ 
    return name; 
} 
void Employee::set_salaries(double s) 
{ 
    salaries = s; 
} 

int main() 
{ 
    // using vector as an object 

    int i; 
    vector<Employee> staff(10);     
    staff[0] = Employee{"Harry Potter", 55000}; 

    if (staff[i].get_salaries() < 100000) 
     cout << staff[i].get_salaries(); 


    return 0; 
} 
+0

'сотрудников [0] = Employee ("Гарри Поттер", 55000),' должен делать :) – Rerito

ответ

2

Ваш класс Employee не имеет конструктор по умолчанию, без параметров.
Когда вы создаете вектор staff, он создаст объекты 10 Employee, тем самым вызывая конструктор по умолчанию.

+1

Спасибо ребята, все для ответа на мой вопрос! Я выбрал этот ответ, потому что он быстро ответил на оба моих вопроса :) !! –

1

Для поддержки этого

vector<Employee> staff(10);     

вы должны предоставить конструктор по умолчанию в классе.

-1

Ваш главный метод

int main() 
{ 
    // using vector as an object 

    int i;       // [i] not initialized anywhere.  
    vector<Employee> staff(10);  // Incorrect way of declaring a vector     
    staff[0] = Employee{"Harry Potter", 55000}; // Incorrect way of creating a instance of class 

    if (staff[i].get_salaries() < 100000) 
     cout << staff[i].get_salaries(); 


    return 0; 
} 

Измените основной метод, как этот

int main() 
{ 
    vector<Employee> staff;   
    staff.push_back(Employee("Harry Potter", 55000)); 

    if (staff[0].get_salaries() < 100000) 
     cout << staff[0].get_salaries(); 

    return 0; 
} 
+0

Не будет ли 'Employee emp (...' '' '' '' '' Самая неприятная проблема синтаксического анализа, или мне еще слишком рано думать? :) – Jite

+0

Инициализация объектов Employee с помощью '{}' вместо '()' как это делает OP, должно быть более правильным ('Uniform initialization' C++ 11), причиной« самой неприятной проблемы синтаксического анализа ». – Jite

Смежные вопросы