C++ 关于设置空指针的困惑
我有一个类对象数组:C++ 关于设置空指针的困惑,c++,C++,我有一个类对象数组: Course* courseList[100]; 如果我想将CourseList设置为空指针,我会这样做吗 courseList=nullptr; 但“表达式必须是可修改的值”有一个错误 对于我的类ScmApp的构造函数 ScmApp::ScmApp() { noOfCourses = 0; courseList_[100] = {}; } 这是将courseList的所有元素设置为nullptr的方法吗?您的courseList是一组100个元素,而不
Course* courseList[100];
如果我想将CourseList设置为空指针,我会这样做吗 courseList=nullptr; 但“表达式必须是可修改的值”有一个错误 对于我的类ScmApp的构造函数
ScmApp::ScmApp() {
noOfCourses = 0;
courseList_[100] = {};
}
这是将courseList的所有元素设置为nullptr的方法吗?您的
courseList
是一组100个元素,而不仅仅是一个元素。因此您需要迭代所有100个元素,并将每个元素指定为空指针。当此Course*courseList[100]={}
做这件事。唯一可以设置为nullptr
的就是指针
CourseList
不是指针。这就是问题所在。这就是为什么不能将其设置为空指针
CourseList
是指针数组。相反,您可以将CourseList
中的每个指针设置为空指针:
for (auto &p:CourseList)
p=nullptr;
如果要在构造函数中初始化此数组,请使用
std::fill(courseList, courseList + 100, nullptr);
或者使用
std::array courseList;
而不是Course*courseList[100];
courseList*courseList[100]
不创建指向数组的指针,而是创建一个指针数组。根据您实际需要,您应该使用以下选项之一
CourseList
s的数组
CourseList courseList[100]; // possibly with = {}
courseList[0].attr = whatever; // usage
std::array<CourseList, 100> courseList; // possibly with = {}
courseList[0].attr = whatever;
比上述更好,但类似的是std::array
ofCourseList
s
CourseList courseList[100]; // possibly with = {}
courseList[0].attr = whatever; // usage
std::array<CourseList, 100> courseList; // possibly with = {}
courseList[0].attr = whatever;
如果您在编译时不知道对象的大小,或者希望传递对象,那么最好使用std::vector
std::vector<CourseList> courseList(100);
courseList[0].attr = whatever;
解决更新问题:您可以在类中使用默认初始值设定项,如下所示:
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);
不,您需要循环整个容器并将每个元素指定为空指针。当这个
Course*courseList(100,null);
执行相同的操作时。“如果我想将courseList设置为空指针“CourseList
不是指针,而是指针数组。是否要将每个元素设置为nullptr
?courseList
是一个数组。不能将数组设置为null,就像不能将CAT或洗碗机设置为null一样。只有指针可以为空。@KerrekSB,为什么Course*courseList[100]={nullptr}代码>做这项工作?你没有一个“类对象”数组,你有一个指针数组
确实无法编译。courseList
不是一个容器,它是一个数组,这就是为什么没有一个构造函数接受两个参数。我刚刚检查了它,你们说得对。我的坏消息@molbdnilothanks@Andy完成了,但是你应该认真地重新思考你的方法。@Andy你的问题有几个正确的答案。现在你试过了吗??
std::fill(std::begin(courseList), std::end(courseList), nullptr);