векторная проблема, C ++ не уверен, что я сделал неправильно

0

Хорошо, поэтому я довольно новичок в c++, и это моя первая попытка использования векторов. Моя цель - хранить объекты в векторе. Я пытаюсь следовать этому учебнику по YouTube:

http://www.youtube.com/watch?v=iPlW5tSUOUM

и я думаю, что мой практически не отличается от его пробегов.

Я просто продолжаю получать ошибки, и это не сработает. Любая помощь будет оценена :) Возможно, это что-то маленькое, но я уже некоторое время проверяю, и я ничего не вижу.

Ошибки: 1> c:\users\user\desktop\vector objects c++\testvectorobjects\testvectorobjects\main.cpp(61): ошибка C3867: "Сотрудники :: getSalary": список вызовов отсутствующих аргументов; use '& Employees :: getSalary' для создания указателя на члена

1> c:\users\user\desktop\vector objects c++\testvectorobjects\testvectorobjects\main.cpp(61): ошибка C2679: двоичный '<<': оператор не найден, который принимает правый операнд типа ' overloaded-function '(или нет приемлемого преобразования)

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream (695): может быть 'std :: basic_ostream <_Elem, _Traits> & std :: operator <<> (std :: basic_ostream < _Elem, _Traits> &, const char *) '

У меня есть 3 файла: main.cpp, Employee.h, Employees.cpp

//main.cpp

#include <iostream>
#include <string>
#include <vector>
#include "Employee.h"

void fillVector(vector<Employees>&);
//fill vector - fills in Employee Info
//vector<Employees>& - Employees at the station
void printVector(const vector<Employees>&);
//print vector - prints the employee info
//const vector<Employees>& - employees at the station

using namespace std;

    vector<Employees> Staff;


int main(){

    fillVector(Staff);
    printVector(Staff);

}


//filling the employee vector
void fillVector(vector<Employees> & newStaff){

    int id;
    double salary;
    string name;

    cout << "Number of Employees" << endl;
    int amountEmployees;
    cin >> amountEmployees;

    for (int i = 0; i < amountEmployees; i++) {
        cout << "Enter Employee Id: ";
        cin >> id;
        cout << "Enter Employee Salary: ";
        cin >> salary;
        cout << "Enter Employee Name: ";
        cin >> name;

        Employees newEmployees(id, salary, name);
        newStaff.push_back(newEmployees);
        cout << endl;
    }
    cout << endl;

}

//printing the employee vector
void printVector(const vector<Employees>& newStaff){

    unsigned int size = newStaff.size();

    for (unsigned int i = 0; i < size; i++) {
        cout << "Employee Id: " << newStaff[i].getID << endl;
        cout << "Employee Name: " << newStaff[i].getName << end;
        cout << "Employee Salary: " << newStaff[i].getSalary << end;
        cout << endl;
    }

}

//Employee.h

//Header

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

#include <iostream>
#include <string>
using namespace std;

class Employees{

    public:
        //after
        //Default Constructor
        Employees();

        //Overload constructor
        Employees(int, double, string);

        //Destructor
        ~Employees();

        //Accessor Functions
        int getID() const;
        //getId
        //return int - Id for Employee
        double getSalary() const;
        //getSalary
        //return salary - salary of Employee
        string getName() const;
        //getName 
        //return name - Name of Employee

        //Mutators
        void setId(int);
        //setId - for Employee

        void setSalary(double);
        //setSalary - for Employee

        void setName(string);
        //setName - for Employee
        //

        //before
        //ID
        //void setEmployeeId(int a){
        //employeeId = a;
        //} 
        ////Salary
        //void setSalary(double b){
        //salary = b;
        //}
        ////Name
        //void setName(string c){
        //name = c;
        //}
    private:
        //after
        //before
        int employeeId; //id
        double employeeSalary; //salary
        string employeeName; //name
};


#endif 

//Employees.cpp

#include "Employee.h"


Employees::Employees() {
    employeeName = ' ';
}

Employees::Employees(int id, double salary, string name){
    employeeId = id;
    employeeSalary = salary;
    employeeName = name;
}

Employees::~Employees(){

}

int Employees::getID()const{
    return employeeId;
}

double Employees::getSalary()const{
    return employeeSalary;
}

string Employees::getName()const{
    return employeeName;
}

void Employees::setId(int id){
    employeeId = id;
}

void Employees::setSalary(double salary){
    employeeSalary = salary;
}

void Employees::setName(string name){
    employeeName = name;
}
  • 0
    Всегда читайте сообщения об ошибках, несколько раз, если это необходимо. И внимательно посмотрите на указанные строки (в вашем случае, строка 61).
Теги:
object
visual-studio
oop
vector

4 ответа

3
Лучший ответ
 'Employees::getSalary': function call missing argument list;

Это кажется совершенно ясным: getSalary - это функция, и вам нужен список аргументов при вызове функции:

cout << "Employee Salary: " << newStaff[i].getSalary() << endl;
                                                    ^^       ^

и аналогично для вызовов getID и getName.

Фиксация, которая также должна исправить вторую ошибку; или это может быть вызвано ошибкой endl.

  • 0
    спасибо, я новичок, это было бы что-то подобное.
2

Я думаю, что ошибка объясняется самим собой, как только вы знаете несколько терминов C++. Вторая часть (use '&Employees::getSalary' to create a pointer to member) на самом деле путает вас, потому что компилятор говорит о совершенно несвязанной C++ возможности, которую, по вашему мнению, вы пытаетесь использовать.

Давайте посмотрим:

"Сотрудники :: getSalary": список вызовов отсутствующих аргументов

Чтобы вызвать функцию, вы должны указать список аргументов с круглыми скобками, даже если у вас нет аргументов вообще!

cout << "Employee Salary: " << newStaff[i].getSalary() << end;

То есть, добавьте несколько () здесь и там.

1

Вы должны использовать функцию call operator() (оператор приложения) для вызова функции

function_name()  // call a function named function_name

таким образом:

cout << "Employee Id: " << newStaff[i].getID() << endl;
                                            ^^
cout << "Employee Name: " << newStaff[i].getName() << end;
                                                ^^
cout << "Employee Salary: " << newStaff[i].getSalary() << end;
                                                    ^^
0

Эта:

newStaff[i].getName

Нужно быть следующим:

newStaff[i].getName()

И так далее.

Ещё вопросы

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