我有一个ToDo类,该类具有描述,日期和优先级作为私有成员变量。
我正在尝试获取已填充的ToDo,并将其添加到ToDos的全局数组中。
我已经使用this->描述,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”将对象传递到数组中
实际:没有可行的重载'='错误
答案 0 :(得分:2)
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;
}
}
答案 1 :(得分:0)
您可以使用例如:
{
auto& nextListElem = usr_TODO_list[SIZE_OF_USR_LIST];
nextListElem.description = desc;
nextListElem.date = date;
nextListElem.priority = priority;
SIZE_OF_USR_LIST++;
return true;
}