读取字符串字符时出错 - 对于数组中的字符串值

Error reading characters of string - for a string value in an array

本文关键字:字符串 数组 于数组 字符 出错 读取      更新时间:2023-10-16

我正在尝试制作一个程序,该程序可以从文本文件中读取有关DVD信息的行。将信息提供给自定义DVD类后,我将打印它。目前,使用调试器时,它显示自定义类的每个参数的以下错误。 请帮忙。

读取字符串字符时出错

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std;
class dvd
{
string movieName, movieProdComp, movieLeadActor, movieLanguage, renterName;
string releaseYear, rentDate, returnDate;
public:
dvd() {};
dvd(string line) {};
dvd(string mn, string mpc, string mla, string ml, string rn, string ry, string rd, string retd);
void print();
};
dvd::dvd(string mn, string mpc, string mla, string ml, string rn, string ry, string rd, string retd) {
movieName = mn;
movieProdComp = mpc;
movieLeadActor = mla;
movieLanguage = ml;
renterName = rn;
releaseYear = ry;
rentDate = rd;
returnDate = retd;
}
void dvd::print() {
cout << "Movie:" << movieName << endl;
cout << "Production:" << movieProdComp << endl;
cout << "Starring:" << movieLeadActor << endl;
cout << "Language:" << movieLanguage << endl;
cout << "Rented By:" << renterName << endl;
cout << "Released:" << releaseYear << endl;
cout << "Rent Date:" << rentDate << endl;
cout << "Return Date:" << returnDate << endl;
}
int main() {
string filepath = "C:\Users\SuperUser\Google Drive\COMP306\TMA2\test.txt";
string line;
ifstream file(filepath);
string arrayDvd[10][8];
if (file.is_open())
{
int i = 0;
int c = 0;
int n = 0;
while (getline(file, line))
{   
arrayDvd[n][c] = line;
i++;
c++;
if (i > 7)
{
n++;
c=i = 0;
}           
}
}
for (int n = 0; n <= 9; n++) 
{
//this is where the error shows.
dvd dvdS[] = { arrayDvd[n][0], arrayDvd[n][1], arrayDvd[n][2], arrayDvd[n][3], arrayDvd[n][4], arrayDvd[n][5], arrayDvd[n][6], arrayDvd[n][7] };
}
}

数据:以下字符串重复 10 次。完整数据

僵尸1
BBC
James
English
Alw
2012
20170601
20170630

更改

dvd dvdS[] = { arrayDvd[n][0], arrayDvd[n][1], arrayDvd[n][2], arrayDvd[n][3], arrayDvd[n][4], arrayDvd[n][5], arrayDvd[n][6], arrayDvd[n][7] };

dvd dvdS{ arrayDvd[n][0], arrayDvd[n][1], arrayDvd[n][2], arrayDvd[n][3], arrayDvd[n][4], arrayDvd[n][5], arrayDvd[n][6], arrayDvd[n][7] };

前者使用一个参数构造函数(不执行任何操作(创建一个包含 8 个实例的 c 样式数组,后者使用 8 参数构造函数创建一个实例。

我相信你想要这样的东西

std::vector<dvd> dvds;
for (int n = 0; n <= 9; n++) 
{
dvds.push_back(dvd(arrayDvd[n][n*7+0], arrayDvd[n][n*7+1], arrayDvd[n][n*7+2], arrayDvd[n][n*7+3], arrayDvd[n][n*7+4], arrayDvd[n][n*7+5], arrayDvd[n][n*7+6], arrayDvd[n][n*7+7]));
}

这将创建一个数组(由 std::vector 包装(并推送其中的每个 DVD 对象。此外,您不需要变量i将其删除,而不是检查i > 7检查是否c > 7