如何在C ++中存储动态创建的对象的地址?

问题描述

int main (void) {
    
    int n = nbegin,v = 1;
    double *A;
    
    A = calloc (m * n,sizeof *A);
    if (A == NULL) {          /* validate EVERY allocation */
        perror ("calloc-A");
        exit (EXIT_FAILURE);
    }
    
    // buildMatrix(); //this fills my matrix with some data
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            A[i * n + j] = v++;
    
    printMatrix (m,n,A);
    if (m > n)
        square_my_matrix (&A,n);
    printMatrix (m,m,A);
}

错误:在* aa [i]中请求成员“显示”,其类型为指针“ A *”

错误:从“ B **”到“ A **”的无效转换[-fpermisive]

解决方法

由于您拥有A **aa[5],所以它是一个指向指针的指针数组,因此您需要三次间接调用才能调用show方法

(*aa[i])->show();

您也不能在其中存储B**,因为您只能(隐式)转换为具有单个间接级别的基类。

但是,您不清楚要做什么。更常见的是,您只需要使用一个指针数组,并且只需要两次间接调用即可:

A *a[5];
for (i = 0; i < 5; ++i)
    if (i & 1)
        a[i] = new A;
    else
        a[i] = new B;
for (i = 0; i < 5; ++i)
    a[i]->show();

很少需要双指针,所以为什么要使用它们?