错误C2679:二进制'=':找不到运算符或没有可接受的转换

时间:2014-03-26 17:13:52

标签: c++ mobile

错误C2679:二进制'=':找不到运算符,它接受'kingMobile :: KingChatFilter *'类型的右手操作数(或者没有可接受的转换)

这是playGame.cpp

filter = new KingChatFilter;  // here is the error line

并在其.h

spKingChatFilter filter;

和KingChatFilter.h

class KingChatFilter : public boost::enable_shared_from_this<KingChatFilter> {
        public:

            KingChatFilter();
            string filter(string msg);

        private:

    };

    typedef boost::shared_ptr<KingChatFilter> spKingChatFilter;

我再次从c ++开始,我试图理解为什么这不起作用...感谢你的耐心......

6 个答案:

答案 0 :(得分:2)

您正尝试将KingChatFilter*分配给shared_ptr<KingChatFilter>。不支持此分配。你可以这样做:

filet = std::make_shared<KingChatFilter>();

答案 1 :(得分:1)

分配不起作用,因为KingChatFilter*类型的指针不能隐式转换为shared_ptr<KingChatFilter>。这是因为shared_ptr<>进行了此类转换explicit


您可以使用以下方法之一:

1

boost::shared_ptr<KingChatFilter> spKingChatFilter( 
                                          boost::make_shared<KingChatFilter>());

2

boost::shared_ptr<KingChatFilter> spKingChatFilter = 
                                          boost::make_shared<KingChatFilter>());

3

boost::shared_ptr<KingChatFilter> spKingChatFilter( new KingChatFilter);

4

boost::shared_ptr<KingChatFilter> spKingChatFilter;
spKingChatFilter.reset( new KingChatFilter);

答案 2 :(得分:1)

就我对Boost的经验而言,从指针构造shared_ptr的构造函数被标记为显式,并且没有赋值指针的赋值运算符。你可以写

filter.reset(new KingChatFilter);

答案 3 :(得分:1)

获取托管类型指针的shared_ptr constructorexplicit

template<class Y> explicit shared_ptr(Y * p);

这可以防止在下面的作业中从KingChatFilter *返回newshared_ptr<KingChatFilter>的隐式转换:

filter = new KingChatFilter;

首选解决方案是用

替换作业
filter = boost::make_shared<KingChatFilter>();

另一个有效的解决方案是

filter = spKingChatFilter(new KingChatFilter);

答案 4 :(得分:0)

此处不确定类型,但new会返回指向内存位置的指针。 'filter'应该是指向类对象的指针。

答案 5 :(得分:0)

尝试以下

filter = spKingChatFilter( new KingChatFilter );

问题至少std::shared_ptr和我认为boost::shared_ptr没有赋值运算符,它具有原始指针类型的右操作数。 只有与shared_ptr相同类型的复制或移动赋值运算符。