gpt4 book ai didi

c++ - 创建指向对象的指针的二维数组并将它们传递给其他类

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:55 26 4
gpt4 key购买 nike

我是 C++ 的新手,研究过数组、指针等,但我不知道如何进行这项工作。希望对您有所帮助!

我需要一个包含 3 x 2 对象 MGFrase 的二维数组 frases。它们将通过 getFrase 方法检索,因此我可以使用 MGFrase 的方法 setTone 更改它的属性 altura,它是一个 int 数组。

在下面的代码中,我希望更改 frases[1, 0]alturas[0] 但它一直在更改 frases[0, 0]

这是创建数组的正确方法吗?方法有问题吗?

如果我的问题不够清楚或不符合论坛规则,请告诉我,以便我进行编辑,我是新来的。

提前谢谢大家!

MGComposition::MGComposition(){
MGFrases** frases;
frases = new MGFrase* [3];
for( int n = 0 ; n < 3 ; n ++ ){
frases [n] = new MGFrase[2];
}

for( int n = 0 ; n < 3 ; n ++ ){
frases[n, 0] = new MGFrase();
frases[n, 1] = new MGFrase();
}
}

MGFrase* MGComposition::getFrase( int channel , int numFrase ){
return frases[ channel, numFrase] ;
}

void MGComposition::log(){
cout << "- Composition --\n";
for( int n = 0 ; n < 3 ; n ++ ){
frases[ n , 0]->log();
frases[ n , 1]->log();
}
}


MGFrase::MGFrase(){
int alturas [10];
}

void MGFrase::setTone(int tone, int index) {
alturas[index] = tone;
}

void MGFrase::log() {

cout << "\n\nLog de MGFrase\n";

cout << "\nAlturas \n";

for (int nota = 0; nota < numNotes; nota++) {
cout << alturas [nota] << ", ";
}
}

MGGenerator::MGGenerator() {

MGComposition* composition;
composition = theComposition;

MGFrase* fraseDoBaixo;
fraseDoBaixo = composition->getFrase(1, 0);
fraseDoBaixo->setTone(8, 0);
composition->log();

}

PS:现在的解决方案是这样的:

MGFrase*** frases;
frases = new MGFrase** [3];
for( int n = 0 ; n < 3 ; n ++ ){
frases [n] = new MGFrase*[2];
}

for( int n = 0 ; n < 3 ; n ++ ){
frases[n][0] = new MGFrase();
frases[n][1] = new MGFrase();
}

最佳答案

作为锯齿状数组实现的二维指针数组需要三个星号:每个维度一个星号,加上一个星号表示它是一个指针数组。一对方括号可以代替一个星号。您的声明new MGFrase* [3]生成一个包含三个指针的数组,因此它缺少一个星号。

整个星号计数业务很快就会变得相当烦人。幸运的是,您可以使用 C++ 容器来避免所有这些情况,例如 std::array<T,N>std::vector<T>代替指针数组。以下是如何让它发挥作用:

std::array<std::array<std::unique_ptr<MGFrase>,2>,3> frases;

MGComposition::MGComposition(){
for( int n = 0 ; n < 3 ; n ++ ){
frases[n][0] = make_unique<MGFrase>(new MGFrase());
frases[n][1] = make_unique<MGFrase>(new MGFrase());
}
}

此方法使用固定大小的 2×3 数组 std::unique_ptr<MGFrase>对象,它负责为您清理内存。现在您的代码不会由于缺少析构函数而造成内存泄漏。

关于c++ - 创建指向对象的指针的二维数组并将它们传递给其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com