错误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 ++开始,我试图理解为什么这不起作用...感谢你的耐心......
答案 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
constructor为explicit
template<class Y> explicit shared_ptr(Y * p);
这可以防止在下面的作业中从KingChatFilter *
返回new
到shared_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相同类型的复制或移动赋值运算符。