[英]std::enable_shared_from_this: no known conversion from a to a
我有一個帶有成員createVector()
的類VectorSpace
,該成員創建一個Vector
,該Vector
具有指向引用VectorSpace
的共享指針。 這是通過std::enable_shared_from_this
實現的。
但是,以下代碼
#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中。)
怎么了
問題在這里:
Vector(std::shared_ptr<VectorSpace> & space):
^^^
Vector
構造函數采用左值引用,但是在createMember()
您傳入了右值:
Vector
createMember()
{
return Vector(shared_from_this());
};
只需刪除&
。 就其價值而言,我無權訪問gcc 4.9.2,但至少在5.1.0上,錯誤消息非常清楚:
main.cpp: In member function 'Vector VectorSpace::createMember()':
main.cpp:24:35: error: invalid initialization of non-const reference of type 'std::shared_ptr<VectorSpace>&' from an rvalue of type 'std::shared_ptr<VectorSpace>'
return Vector(shared_from_this());
^
您代碼中的第二個問題是:
class VectorSpace: std::enable_shared_from_this<VectorSpace> {
正如Angew指出的那樣,您需要公開地從enable_shared_from_this
繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.