C++ 如何使用带指针的数组?
我是编程新手,尝试创建一个包含一系列记录的数组,然后让程序接受输入,最后打印出列表的内容 我在记录addRecord函数中某些变量的值时遇到问题,因为下面代码的输出如下:C++ 如何使用带指针的数组?,c++,C++,我是编程新手,尝试创建一个包含一系列记录的数组,然后让程序接受输入,最后打印出列表的内容 我在记录addRecord函数中某些变量的值时遇到问题,因为下面代码的输出如下: constructor called -1:-1 Eat lunch -1:-1 Watch TV destructor called 为什么我错过了L1.addRecord5,30,做晚饭的电话;完全地,为什么时间没有通过,它们通过构造函数中设置的-1通过 多谢各位 #include <iostream>
constructor called
-1:-1 Eat lunch
-1:-1 Watch TV
destructor called
为什么我错过了L1.addRecord5,30,做晚饭的电话;完全地,为什么时间没有通过,它们通过构造函数中设置的-1通过
多谢各位
#include <iostream>
#include <string>
using namespace std;
class Record {
private:
int hour;
int minute;
string todo;
public:
Record()
{
hour = -1;
minute = -1;
todo = "N/A";
}
void setData(int hour, int minute, const char* td);
void setData(Record& e);
void printRecord();
};
class List
{
private:
Record* recordArr;
int maxRecords;
int actualRecordCount;
public:
List(int maxRecords);
List(List& s) {
actualRecordCount = s.actualRecordCount;
maxRecords = s.maxRecords;
recordArr = new Record[maxRecords];
for (int i = 0; i < actualRecordCount; i++)
{
recordArr[i].setData(s.recordArr[i]);
}
std::cout << "copy constructor called." << std::endl;
}
~List();
bool addRecord(int hour, int minute, const char* todo);
void printList();
};
///////////////////////////
void Record::setData(int hour, int minute, const char* td)
{
hour = hour;
minute = minute;
todo = td;
}
void Record::setData(Record& e)
{
hour = e.hour;
minute = e.minute;
todo = e.todo;
}
void Record::printRecord()
{
std::cout << hour << ":" << minute << " " << todo << std::endl;
}
List::List(int maxRecords)
: maxRecords(maxRecords)
{
actualRecordCount = 0;
recordArr = new Record[maxRecords];
std::cout << "constructor called" << std::endl;
}
List::~List()
{
std::cout << "\ndestructor called";
delete[] recordArr;
}
bool List::addRecord(int hour, int minute, const char* todo)
{
Record newRecord; // create new Record
newRecord.setData(hour, minute, todo); //assign values
if (actualRecordCount >= maxRecords) // array full
{
return false;
}
else
{
recordArr[actualRecordCount] = newRecord; // put new Record into the array of Entry
actualRecordCount++; // increment Entry count
return true;
}
}
void List::printList()
{
for (int i = 0; i < actualRecordCount; i++)
{
recordArr[i].printRecord();
cout << endl;
i++;
}
}
int main() {
List L1(20);
L1.addRecord(2, 30, "Eat lunch");
L1.addRecord(5, 30, "Make dinner");
L1.addRecord(7, 30, "Watch TV");
L1.printList();
}
hour是此setData方法的参数名称。小时=小时;,因此,将此参数设置为自身。不管怎样,这绝对是一事无成的。接下来的两个作业也一样
这里您的明显意图是初始化碰巧有同名成员的类。当不同的事物在C++中有相同的名称时,有一组复杂的规则来选择名称所代表的东西。在=运算符的左侧和右侧,这些规则是相同的,因此这两个小时都指向同一个对象:该类方法的参数
您只需将参数重命名为方法:
void Record::setData(int hourArg, int minuteArg, const char* tdArg)
{
hour = hourArg;
等等。或者,如果希望保持参数名称不变,请使其更加明确:
this->hour=hour;
hour是此setData方法的参数名称。小时=小时;,因此,将此参数设置为自身。不管怎样,这绝对是一事无成的。接下来的两个作业也一样
这里您的明显意图是初始化碰巧有同名成员的类。当不同的事物在C++中有相同的名称时,有一组复杂的规则来选择名称所代表的东西。在=运算符的左侧和右侧,这些规则是相同的,因此这两个小时都指向同一个对象:该类方法的参数
您只需将参数重命名为方法:
void Record::setData(int hourArg, int minuteArg, const char* tdArg)
{
hour = hourArg;
等等。或者,如果希望保持参数名称不变,请使其更加明确:
this->hour=hour;
一个问题是,具有三个参数的Record::setData函数实际上没有设置类对象的小时和分钟字段!这是因为您使用了与类成员同名的参数,这是一种糟糕的编码风格。因此,在下面的代码中,前两个赋值只是将参数值替换为它们自己:
无效记录::setDataint小时,int分钟,const字符*td
{
hour=hour;//这一行和下一行是参数的自赋值
minute=minute;//给定,因此实际上什么也不做!
todo=td;//但是,这是可以的,因为没有歧义。
}
要解决此问题,请添加对目标的显式this->引用:
无效记录::setDataint小时,int分钟,const字符*td
{
这个->小时=小时;
这->分钟=分钟;
todo=td;
}
或者更好,在我看来,给前两个参数起个不含糊的名字:
无效记录::setDataint以小时为单位,int以分钟为单位,const char*td
{
小时=以小时为单位;
分钟=以分钟为单位;
todo=td;
}
一个问题是,具有三个参数的Record::setData函数实际上没有设置类对象的小时和分钟字段!这是因为您使用了与类成员同名的参数,这是一种糟糕的编码风格。因此,在下面的代码中,前两个赋值只是将参数值替换为它们自己:
无效记录::setDataint小时,int分钟,const字符*td
{
hour=hour;//这一行和下一行是参数的自赋值
minute=minute;//给定,因此实际上什么也不做!
todo=td;//但是,这是可以的,因为没有歧义。
}
要解决此问题,请添加对目标的显式this->引用:
无效记录::setDataint小时,int分钟,const字符*td
{
这个->小时=小时;
这->分钟=分钟;
todo=td;
}
或者更好,在我看来,给前两个参数起个不含糊的名字:
无效记录::setDataint以小时为单位,int以分钟为单位,const char*td
{
小时=以小时为单位;
分钟=以分钟为单位;
todo=td;
}
另一个错误在这里
void List::printList()
{
for (int i = 0; i < actualRecordCount; i++)
{
recordArr[i].printRecord();
cout << endl;
i++;
}
}
您有两次i++。另一个错误在这里
void List::printList()
{
for (int i = 0; i < actualRecordCount; i++)
{
recordArr[i].printRecord();
cout << endl;
i++;
}
}
你有两次i++。但这不是std::vector。这是一个记录对象的c数组……但这不是std::vector。这是一个记录对象的c数组…@Reno这是调试器的用途。@Reno这是调试器的用途。