指针赋值

时间:2009-12-24 15:26:32

标签: c++

我有以下模板结构:

template <typename scalar_type>
struct postc_params{
    scalar_type delta; 
    unsigned int time_horizon; 
    matrix_math::matrix<scalar_type> dynamics;
    boost::shared_ptr<continuous_set> invariant_set_ptr;
    boost::shared_ptr<continuous_set> input_set_ptr;
    boost::shared_ptr<continuous_set> initial_set_ptr;
};

现在,我有一个模板化的类,其中包含上述结构类型的私有成员

template <typename scalar_type>
class A{
....
private:
....
postc_params<scalar_type> my_postc;
};

在A类的成员函数定义中,我有以下代码行:

my_postc.initial_set_ptr = my_postc.initial_set_ptr->transform(some_obj);

transform函数返回一个类型为

的指针
boost::shared_ptr<continuous_set>

使用此代码,我有以下错误:

将'const boost :: shared_ptr'作为'boost :: shared_ptr&lt;的'this'参数传递&GT;&安培;升压:: shared_ptr的&LT; &GT; ::运算=  (const boost :: shared_ptr&amp;)[with Y = const continuous :: continuous_set,T = continuous :: continuous_set]'丢弃限定符

任何人都可以帮助我解决问题吗?

2 个答案:

答案 0 :(得分:1)

成员函数是否在A const

如果我正确地阅读你的代码,你试图从一个不允许的const成员函数中改变一个类的成员。从成员函数中删除const或创建成员mutable

所以,

mutable postc_params<scalar_type> my_postc;

但是,我会照顾这种方法。也许重新评估改变my_postc的方法为const的原因。它不应该是const,也不应该更改my_postc

答案 1 :(得分:1)

您正尝试根据错误消息分配给const指针:“将'const boost :: shared_ptr'传递为'this'参数”

你提到的成员函数肯定是const因此错误

你应该重新考虑你的设计而不是在你的代码中抛出mutable