簡體   English   中英

std :: enable_shared_from_this:沒有已知的從到的轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM