C++ 通过对象的指针数组分配内存,并使用方法设置它们的名称
我正在使用指针数组进行内存分配练习。任务是创建一个包含26个对象的数组。然后循环遍历字母表,对于数组中的每个项目,使用setName方法为数组中该索引处的字母表/对象设置名称,例如,使用字母表中的每个字母命名每个项目,并将其输出 然后使用另一个循环再次遍历数组,并使用getName方法打印所有名称。我已经编写了面向对象的代码。当我运行它时,我得到一个调试断言失败!错误我一时想不出代码中的错误是什么。我知道有更简单的方法来计算字母表,例如,只使用for循环,但我试图了解循环和指针数组如何一起工作,以及构造函数和析构函数的使用。这是我的代码:C++ 通过对象的指针数组分配内存,并使用方法设置它们的名称,c++,visual-studio-2015,C++,Visual Studio 2015,我正在使用指针数组进行内存分配练习。任务是创建一个包含26个对象的数组。然后循环遍历字母表,对于数组中的每个项目,使用setName方法为数组中该索引处的字母表/对象设置名称,例如,使用字母表中的每个字母命名每个项目,并将其输出 然后使用另一个循环再次遍历数组,并使用getName方法打印所有名称。我已经编写了面向对象的代码。当我运行它时,我得到一个调试断言失败!错误我一时想不出代码中的错误是什么。我知道有更简单的方法来计算字母表,例如,只使用for循环,但我试图了解循环和指针数组如何一起工作,
class Alphabet {
private:
string name;
public:
Alphabet() {
cout << "Alphabet created" << endl;
}
Alphabet(const Alphabet& other) :name(other.name) {
cout << "Alphabet created by copying" << endl;
}
~Alphabet() {
cout << "destructor called" << endl;
}
void setName(string name) {
this->name = name;
}
void speak() const {
cout << "My name is: " << name << endl;
}
};
int main()
{
{
char ALPH = 'a';
string name(4, ALPH);
Alphabet* alphabet1[4];
for (int n = 0; n < ALPH; n++) {
alphabet1[n] = new Alphabet;
cout << alphabet1[n] << endl;
}
alphabet1[4]->setName("a");
alphabet1[4]->speak();
for (int n = 0; n < ALPH; n++) {
delete alphabet1[n];
}
return 0;
}
}
您的代码中有几个缺陷,我会将它们与一些可能会启发您的信息混在一起列出: 如果对ALPH进行数字解释,则将使用“a”的int值。这是一个像63之类的数字;因此,for循环超出了界限 alphabet1[4]表示alphabet1的第五个指针;但是,这里只有四个条目 字符串名称4,ALPH;创建aaaa,这是你的意图吗?
纠正这些错误,它应该可以正常运行。如果要将字符映射到字符串或某个类,可以使用std::map或std::map;然而,这可能会有一些开销,有更聪明的解决方案您的意思是为int n=0编写;n<4;n++{?寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中复制它所需的最短代码。没有明确问题说明的问题对其他读者没有用处。请参阅:。尝试过但程序仍停止工作Alph不是解释器我相信数字是d。只是在循环之前、内部和之后做了一个cout,它仍然是“a”。我不想像你可能已经收集到的那样得到aaaa,我仍然试图得到字符串名4,ALPH到a,b,c…使用cout时不是这样解释的,而是当它与在for循环中的n