Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过对象的指针数组分配内存,并使用方法设置它们的名称_C++_Visual Studio 2015 - Fatal编程技术网

C++ 通过对象的指针数组分配内存,并使用方法设置它们的名称

C++ 通过对象的指针数组分配内存,并使用方法设置它们的名称,c++,visual-studio-2015,C++,Visual Studio 2015,我正在使用指针数组进行内存分配练习。任务是创建一个包含26个对象的数组。然后循环遍历字母表,对于数组中的每个项目,使用setName方法为数组中该索引处的字母表/对象设置名称,例如,使用字母表中的每个字母命名每个项目,并将其输出 然后使用另一个循环再次遍历数组,并使用getName方法打印所有名称。我已经编写了面向对象的代码。当我运行它时,我得到一个调试断言失败!错误我一时想不出代码中的错误是什么。我知道有更简单的方法来计算字母表,例如,只使用for循环,但我试图了解循环和指针数组如何一起工作,

我正在使用指针数组进行内存分配练习。任务是创建一个包含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