我有一个类VectorSpace
与成员createVector()
它创建一个带有指向VectorSpace
的共享指针的Vector
。这通过std::enable_shared_from_this
来实现。std :: enable_shared_from_this:没有已知的从a到a的转换
然而,这下面的代码
#include <memory>
class Vector;
class VectorSpace;
class Vector {
public:
Vector(std::shared_ptr<VectorSpace> & space):
space_(space)
{
};
private:
std::shared_ptr<VectorSpace> space_;
};
class VectorSpace: std::enable_shared_from_this<VectorSpace> {
public:
VectorSpace(){};
Vector
createMember()
{
return Vector(shared_from_this());
};
};
int main() {
auto space = std::make_shared<VectorSpace>();
Vector x(space);
}
失败与和非常奇怪的错误消息
test.cpp:8:3: note: no known conversion for argument 1 from ‘std::shared_ptr<VectorSpace>’ to ‘std::shared_ptr<VectorSpace>’
(这与GCC 4.9.2。)
编译这里的交易是什么?
尝试删除&在向量构造函数:shared_from_this创建新的shared_ptr – Hcorg
@Hcorg刚刚注意到您的评论。你可能会考虑让这类事情成为答案 - 它解决了这个问题。 –
我可以告诉你编辑了错误信息,因为你没有显示错误。您仅在错误中复制** note **。请不要隐藏错误消息。他们不应该是秘密! – Yakk