Как я могу передать объект в глобальный массив с помощью вызова публичной функции, используя 'this'? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть класс ToDo, у которого есть описание, дата и приоритет в качестве закрытых переменных-членов.

Я пытаюсь взять заполненную задачу и добавить ее в глобальный массив задач.

Я установил все переменные-члены объекта, используя this-> description, this-> date и this-> priority, но когда я пытаюсь добавить объект с помощью следующего - TODO_GLOBAL_ARRAY [CURRENT_LOC_OF_ARRAY] = this; - Я получаю сообщение об ошибке "нет жизнеспособных перегруженных" = ".

Я также пытался создать экземпляр объекта ToDo и передать его в массив, но он по-прежнему оставляет исходный объект без данных и не распечатывает правильно.


//ToDo Header


#include <string>

using std::string;

#ifndef TODOLIST
#define TODOLIST

class ToDoList{
private:
    string description;
    string date;
    int priority;

public:
    bool addToList(ToDoList todoItem);
    bool addToList(string desc, string date, int priority);
    bool getNextItem(ToDoList &toDoItem);
    bool getNextItem(string &desc, string &date, int &priority);
    bool getByPriority(ToDoList *results, int priority);
    bool getByPriority(ToDoList *results, int priority, int &resultSize);
    void printToDo();
    void printToDo(ToDoList aToDo);
    void printToDoList(ToDoList *aToDoList);
    void printToDoList(ToDoList *aToDoList, int size);

    ToDoList();
    ToDoList(string desc, string date, int priority);
// TODO: implement method to get ToDo from usr input
};

#endif

extern ToDoList usr_TODO_list[];
extern const int MAX_ITEMS_TODO;
extern int SIZE_OF_USR_LIST;
extern int NEXT_INDEX;

// From ToDo.cpp

bool ToDoList::addToList(string desc, string date, int priority){
    if (SIZE_OF_USR_LIST == MAX_ITEMS_TODO) {
        return false;
    }
    else{
        ToDoList aToDo;
        this->description = desc;
        this->date = date;
        this->priority = priority;
        usr_TODO_list[SIZE_OF_USR_LIST] = this;
        SIZE_OF_USR_LIST++;
        return true;
    }
}

// From main.cpp

using namespace std;

ToDoList usr_TODO_list[100];
int const MAX_ITEMS_TODO (100);
int SIZE_OF_USR_LIST = 0;
int NEXT_INDEX = 0;

int main()
{ // etc...

Ожидается: для передачи объекта в массив с помощью 'this'

Факт: ошибка не перегружена '=' ошибка

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

usr_TODO_list[SIZE_OF_USR_LIST] = this; пытается назначить указатель на объект class.В этом случае, поскольку ToDoList легко копируется, вы можете просто разыменовать this.

usr_TODO_list[SIZE_OF_USR_LIST] = *this;

Я бы также подумал о рефакторинге, чтобы сделать вещи немного менее запутаннымито есть ToDoList -> ToDo или если что-то еще имеет более контекстуальный смысл, например Job, то это тоже может сработать.И, как указал @WhozCraig, addToList может быть уменьшено до:

bool ToDoList::addToList(string desc, string date, int priority) {
    if (SIZE_OF_USR_LIST == MAX_ITEMS_TODO) {
        return false;
    }
    else {
        usr_TODO_list[SIZE_OF_USR_LIST++] = ToDoList(desc, date, priority);
        return true;
    }
}

Хотя это будет означать, что объект this не затронут, но если его нужно изменить, вы можете вместо этого использовать:

bool ToDoList::addToList(string desc, string date, int priority) {
    if (SIZE_OF_USR_LIST == MAX_ITEMS_TODO) {
        return false;
    }
    else {
        *this = ToDoList(desc, date, priority);
        usr_TODO_list[SIZE_OF_USR_LIST++] = *this;
        return true;
    }
}
0 голосов
/ 17 мая 2019

Вы можете использовать, например:

{
    auto& nextListElem = usr_TODO_list[SIZE_OF_USR_LIST];
    nextListElem.description = desc;
    nextListElem.date = date;
    nextListElem.priority = priority;
    SIZE_OF_USR_LIST++;
    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...