我有一个类对象数组:
Course* courseList[100];
如果我想将CourseList设置为空指针,我该怎么做 courseList = nullptr; 但是我得到一个错误"表达式必须是可修改的值。
对于我的类ScmApp的构造函数
ScmApp::ScmApp() {
noOfCourses = 0;
courseList_[100] = {};
}
这是将courseList_的所有元素设置为nullptr的方法吗?
答案 0 :(得分:3)
你唯一可以设置为nullptr
的是指针。
CourseList
不是指针。那就是问题所在。这就是为什么你不能将它设置为空指针。
CourseList
是一个指针数组。相反,你可以做的是将CourseList
中的每个指针都设置为空指针:
for (auto &p:CourseList)
p=nullptr;
答案 1 :(得分:2)
您的CourseList
是一组100个元素,而不仅仅是一个元素。因此,您需要迭代所有100并将每个元素指定为空指针。当Course* courseList[100] = {};
完成此事时。
答案 2 :(得分:2)
Course * courseList[100] = {};
如果要在构造函数中初始化此数组,请使用
std::fill(courseList, courseList + 100, nullptr);
或使用std::array<Course *, 100> courseList;
代替Course * courseList[100];
答案 3 :(得分:0)
CourseList* courseList[100]
不会创建指向数组的指针,它会创建一个指针数组。根据您的实际需要,您应该使用以下之一
CourseList
s
CourseList courseList[100]; // possibly with = {}
courseList[0].attr = whatever; // usage
比上述更好,但相似,std::array
CourseList
std::array<CourseList, 100> courseList; // possibly with = {}
courseList[0].attr = whatever;
或者最接近你想要的,指向std::array
CourseList
的指针。这可能不是最好的,但是,它仍然是:
std::array<CourseList, 100>* courseList = nullptr;
courseList = new std::array<CourseList, 100>{}; // prefer unique_ptr
courseList->at(0).attr = whatever;
如果您在编译时不知道大小,或想要传递对象,最好的办法是使用std::vector
std::vector<CourseList> courseList(100);
courseList[0].attr = whatever;
最后,最奇怪的选择是实际定义一个指向数组的指针:
CourseList (*courseList)[100] = nullptr;
解决更新问题:您可以在类中使用默认初始值设定项,如下所示:
class ScmApp {
private:
CourseList* courseList[100] = {};
int noOfCourses = 0;
};
但似乎您应该使用可扩展的容器std::vector
并调用push_back
来重复添加课程。我所看到的是一个非常难以维持的跟踪谁在哪个班级。
如果您必须使用现有数组并将所有内容设置为nullptr
,那么您可以使用std::fill
std::fill(std::begin(courseList), std::end(courseList), nullptr);