c++ - 如何将新创建的对象添加到数组中
问题描述
我想将一个对象添加到数组中。我试图在这个的构造函数中做到这一点。我开始学习 c++,但我不确定为什么它不能以这种方式工作。有人可以解释为什么它不起作用以及如何正确地做到这一点吗?
#include <iostream>
using namespace std;
const int CAPACITY = 50;
class Photo
{
private:
string title, description, size;
int year, month;
static Photo collection[CAPACITY];
static int collection_size;
public:
Photo(string title, string description, string size, int year, int month)
:title(title), description(description), size(size), year(year), month(month)
{
collection[collection_size++] = this;
}
Photo()
:Photo("", "", "1920x1080", 2021, 1)
{
}
static int get_collection_size(){
return collection_size+1;
}
static void print_collection(){
for(auto photo : collection){
cout << photo.size;
}
}
};
Photo Photo::collection[CAPACITY] = {};
int Photo::collection_size = 0;
int main(){
Photo p;
p.print_collection();
return 0;
}
解决方案
您的构造函数试图将Photo*
指针存储到对象数组中Photo
。你必须要么
- 取消引用
this
指针以分配Photo
被指向的对象。
collection[collection_size++] = *this;
- 更改数组以存储
Photo*
指针。
static Photo* collection[CAPACITY];
推荐阅读
- r - 将连续数据框转换为分类
- symlink - 使用 Yarn 工作区,编译后的二进制文件如何链接到编译后的工作区?
- php - 将 MYSQL 生成的选定记录移动到另一个表 - 复选框和按钮
- angular - 在“缓存”时挂起可观察的阻塞路由器
- r - 将 predict() 的结果放在列表内的 for 循环中
- c# - 如何使用 lambda 表达式 c# 加入 2 个表
- operating-system - 自动重命名文件
- java - 双方语音通话录音不适用于某些小米和三星设备
- qt - 无法为模块加载 qmllive 插件
- javascript - 重绘触发器时如何处理更改明显属性,例如填充渲染器?