首页 新闻 会员 周边

const参数的问题,如何转换加上const?(c++)

0
悬赏园豆:5 [已解决问题] 解决于 2015-06-12 23:00

某一函数需要 类型为 shared_ptr<const vector<shared_ptr<OBXX>>>的参数,我的程序需要组装这一参数,所以声明时是shared_ptr<vector<shared_ptr<OBXX>>>,没有其中的const,等我得到值之后要传入,总是报告参数类型不正确,从非const到const不应该是很合理的事吗(又不是从const到非const)?为什么还要求转换?这不是c++语言应该处理的事情吗?如何转换呢?

Patrickz10的主页 Patrickz10 | 初学一级 | 园豆:7
提问于:2015-06-11 23:57
< >
分享
最佳答案
0

楼主用的是哪个编译器,我用VC和g++试了没有问题啊,下面的代码可以正常编译

g++的编译命令:g++ -std=c++0x test.cpp

不知道楼主是不是下面这个意思

#include <vector>
#include <memory>
using namespace std;

class A
{
public:
    int ccc;
    int GetCCC()
    {
        return this->ccc;
    }
};

void fun(shared_ptr<const vector<shared_ptr<A>>>)
{
}

int main()
{
    shared_ptr<vector<shared_ptr<A>>> a;
    fun(a);
    return 0;
}
收获园豆:5
aspnet | 初学一级 |园豆:79 | 2015-06-12 09:25

我用vc2013

Patrickz10 | 园豆:7 (初学一级) | 2015-06-12 11:54

看来问题在别处,也许不是const的问题,我用你的代码运行,也正常,多谢提醒

Patrickz10 | 园豆:7 (初学一级) | 2015-06-12 12:03

例子怎么改来改去想让它尽可能像我的项目环境且重新那个错误,但是例子怎么搞都行,就是不会出错,而我项目却连编译都不行,而且就在调用的函数的这个地方编译不过的,很难找到原因,我干脆就将const都去掉了

Patrickz10 | 园豆:7 (初学一级) | 2015-06-12 22:49
其他回答(2)
0

你是说,有个函数是这样:

void func(shared_ptr<const vector<shared_ptr<OBXX>>> arr);

你这样调用:

shared_ptr<vector<shared_ptr<OBXX>>> arr;

func(arr); // 编译提示语法错误?

是这样吗?

Launcher | 园豆:45045 (高人七级) | 2015-06-12 09:24

是的,问题就是这样

支持(0) 反对(0) Patrickz10 | 园豆:7 (初学一级) | 2015-06-12 11:52

@Patrickz10: 你能把编译提示的错误给贴出来吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-06-12 13:21

@Launcher: 就是说什么未供处理的异常:0xC0000005吧,问题刚找到了,参数传递是可以的,但是在调用那个函数func之后,arr就变成不能操作了,操作就报错

支持(0) 反对(0) Patrickz10 | 园豆:7 (初学一级) | 2015-06-12 22:34

@Launcher: 还是有蹊跷,模拟例子和我项目环境复杂性相差太远,例子怎么搞都行,在我项目却连编译都不行,很难找到原因,我干脆就将const都去掉了

支持(0) 反对(0) Patrickz10 | 园豆:7 (初学一级) | 2015-06-12 22:46

@Patrickz10: 你得分清楚编译时和运行时,0xC0000005 这个是运行时错误,"连编译都不行", 这是编译时错误,编译时错误 VS 会给出具体的描述,通过描述才能知道具体的语法错误是啥。如果你看不懂编译时的错误描述,你可以贴出来,你不贴出来,或者你都看不懂,你自然很难找到原因。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-06-15 09:17
-1

不可以,常量描述,肯定只能在定义时使用,因为他的存储方法编译方式和变量都是不一样的

吴瑞祥 | 园豆:29449 (高人七级) | 2015-06-12 09:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册