c++ - C++ - 遍历指针数组会导致错误
问题描述
所以我有两个课程 - Dvd 和 DvdGroup。DvdGroup 基本上管理一组 dvd 并为该类提供可操作的成员函数。我正在努力弄清楚如何遍历 C++ 中的指针数组。基本上对于 DvdGroup 函数,它应该是执行 dvd 组的深层复制的复制构造函数。其目的是调用 Dvd 复制构造函数来创建每个 Dvd 对象的副本。
但是,当我尝试这样做时,会出现许多错误
DvdGroup.cc: In copy constructor ‘DvdGroup::DvdGroup(DvdGroup&)’:
DvdGroup.cc:18:43: error: no matching function for call to ‘Dvd::Dvd(Dvd*&)’
Dvd newDvd(dvds.dvdCollection[i]);
In file included from DvdGroup.h:5:0,
from DvdGroup.cc:5:
Dvd.h:10:5: note: candidate: Dvd::Dvd(Dvd&)
Dvd(Dvd&);
^~~~~
Dvd.h:10:5: note: no known conversion for argument 1 from ‘Dvd*’ to ‘Dvd&’
Dvd.h:8:5: note: candidate: Dvd::Dvd(std::__cxx11::string, int)
Dvd(string, int);
^~~~~
Dvd.h:8:5: note: candidate expects 2 arguments, 1 provided
DvdGroup.cc:19:24: error: cannot convert ‘Dvd’ to ‘Dvd*’ in assignment
dvdCollection[i] = newDvd;
我的 for 循环应该做一个非常简单的任务,但我不知道我做错了什么。我想知道是否有人可以提供帮助。
DVDGroup.cc 文件:
DvdGroup::DvdGroup(DvdGroup& dvds){
numDvds = dvds.numDvds;
for(int i = 0; i < numDvds; ++i){
Dvd newDvd(dvds.dvdCollection[i]);
dvdCollection[i] = newDvd;
}
}
DVDGroup.h:
#ifndef DVDGROUP_H
#define DVDGROUP_H
#define MAX_DVDS 15
#include <string>
using namespace std;
class DvdGroup
{
public:
DvdGroup(int);
DvdGroup(DvdGroup&);
~DvdGroup();
void add(Dvd*);
private:
Dvd* dvdCollection[MAX_DVDS];
int numDvds;
};
#endif
Dvd.cc 文件中的复制构造函数:
Dvd::Dvd(Dvd& dvd){
title = dvd.title;
year = dvd.year;
}
解决方案
我会假设 DVD 收藏拥有DVD,在这种情况下,您需要通过new制作新副本,例如
DvdGroup::DvdGroup(DvdGroup& dvds){
numDvds = dvds.numDvds;
for(int i = 0; i < numDvds; ++i){
dvdCollection[i] = new Dvd(*dvds.dvdCollection[i]);
}
}
推荐阅读
- javascript - 为什么 JavaScript bind() 调用将函数的参数反转?
- html - 如何解决网站上显示的 HTML 评论
- javascript - 如何使用 Deck.gl 显示多个 PathLayer
- python - 函数和列表 - 如何使用函数关联两个列表?
- swift - 在深色主题手机上使用“浅色主题”地图
- xcode - 在新 Xcode 中为应用程序的切片版本生成多个 IPA 文件
- python - 选择两个特定列都为非空的行
- java - Java JPA双向ManyToOne映射不起作用
- python - 命名空间包的问题:ModuleNotFoundError
- ios - 在 iOS 中访问密码管理器应用程序