注册 登录
编程论坛 C++教室

这行的错误该如何修改

hffjhhh 发布于 2020-11-25 00:17, 1663 次点击
auto pb=p;这行的错误该如何修改?
程序代码:
#include<iostream>
    const double *f1(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
    const double *f2(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
    const double *f3(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
int main(void){
    using namespace std;
    double n=6;
    double *av=&n;
    const double *(*p[3])(double *ar,int n)={f1,f2,f3};
    const double *(*(*pp)[3])(double *ar,int n)=&p;
    auto pb=p;
    const double *(*pb[3])(double *ar,int n)={f1,f2,f3};   
    const double *ab=p[0](av,3);
    const double *ac=(*pb[1])(av,3);   
    return 0;
}
5 回复
#2
rjsp2020-11-25 08:33
你要将编译器给出的错误信息一起贴出来
    auto pb=p;
    const double *(*pb[3])(double *ar,int n)={f1,f2,f3};
重复定义了

另外,你的三个函数都是返回的临时对象的地址吧
#3
hffjhhh2020-11-25 11:36
回复 2楼 rjsp
编译器显示如下错误:
只有本站会员才能查看附件,请 登录


#4
hffjhhh2020-11-25 11:42
回复 2楼 rjsp
如果删除了这行const double *(*pb[3])(double *ar,int n)={f1,f2,f3};又显示如下错误:
程序代码:
#include<iostream>
    const double *f1(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
    const double *f2(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
    const double *f3(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
int main(void){
    using namespace std;
    double n=6;
    double *av=&n;
    const double *(*p[3])(double *ar,int n)={f1,f2,f3};
    const double *(*(*pp)[3])(double *ar,int n)=&p;
    auto pb=p;              //这行编译器显示[Error] 'pb' does not name a type
    const double *ab=p[0](av,3);
    const double *ac=(*pb[1])(av,3);               //这行编译器显示[Error] 'pb' was not declared in this scope
    return 0;
}

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2020-11-25 11:48编辑过]

#5
hffjhhh2020-11-25 11:57
回复 2楼 rjsp
auto pb=p;删除掉这行后,可以正常运行。
程序代码:
#include<iostream>
    const double *f1(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
    const double *f2(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
    const double *f3(double *ar,int n){
        double a=9;
        double *p=&a;
        return p;
    }
int main(void){
    using namespace std;
    double n=6;
    double *av=&n;
    const double *(*p[3])(double *ar,int n)={f1,f2,f3};
    const double *(*(*pp)[3])(double *ar,int n)=&p;
    const double *(*pb[3])(double *ar,int n)={f1,f2,f3};   
    const double *ab=p[0](av,3);
    const double *ac=(*pb[1])(av,3);   
    return 0;
}

但问题是这行const double *ac=(*pb[1])(av,3);为什么在这里可行?
(*pb[1])是指针pb[1]所指向的值,并不是指针本身,为何写成(*pb[1])?
应该改为const double *ac=pb[1](av,3);才对。
#6
rjsp2020-11-25 14:07
回复 5楼 hffjhhh
你的问题怎么掺杂那么多不相干的干扰信息?

但问题是这行const double *ac=(*pb[1])(av,3);为什么在这里可行?
(*pb[1])是指针pb[1]所指向的值,并不是指针本身,为何写成(*pb[1])?
应该改为const double *ac=pb[1](av,3);才对。

我看不清你的问题,
(pb[1])(av,3)
(*pb[1])(av,3)
(*****pb[1])(av,3)
你可以都试验一下行不行?
(我也不清楚你是不是问这个)
1