楼主用的是哪个编译器,我用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; }
我用vc2013
看来问题在别处,也许不是const的问题,我用你的代码运行,也正常,多谢提醒
例子怎么改来改去想让它尽可能像我的项目环境且重新那个错误,但是例子怎么搞都行,就是不会出错,而我项目却连编译都不行,而且就在调用的函数的这个地方编译不过的,很难找到原因,我干脆就将const都去掉了
你是说,有个函数是这样:
void func(shared_ptr<const vector<shared_ptr<OBXX>>> arr);
你这样调用:
shared_ptr<vector<shared_ptr<OBXX>>> arr;
func(arr); // 编译提示语法错误?
是这样吗?
是的,问题就是这样
@Patrickz10: 你能把编译提示的错误给贴出来吗?
@Launcher: 就是说什么未供处理的异常:0xC0000005吧,问题刚找到了,参数传递是可以的,但是在调用那个函数func之后,arr就变成不能操作了,操作就报错
@Launcher: 还是有蹊跷,模拟例子和我项目环境复杂性相差太远,例子怎么搞都行,在我项目却连编译都不行,很难找到原因,我干脆就将const都去掉了
@Patrickz10: 你得分清楚编译时和运行时,0xC0000005 这个是运行时错误,"连编译都不行", 这是编译时错误,编译时错误 VS 会给出具体的描述,通过描述才能知道具体的语法错误是啥。如果你看不懂编译时的错误描述,你可以贴出来,你不贴出来,或者你都看不懂,你自然很难找到原因。
不可以,常量描述,肯定只能在定义时使用,因为他的存储方法编译方式和变量都是不一样的