簡體   English   中英

沒有已知的從std :: ostream *到std :: ostream&的轉換

[英]No known conversion from std::ostream* to std::ostream&

我有以下代碼:

class A {
public:
    ...
    C *func() { ... }
    void func2() { ... }
    ...
};

class B {
public:
    ...
    B(std::ostream &s, A *curr);
    ...
};

class C {
public:
    ...
    ostream *stream;
    ...
}

void A::func2() {
    ...
    std::ostream *astream = func()->stream;
    B *env = new B(astream, this);
    ...
}

但是我在B *env = new B(astream, this);上收到以下錯誤B *env = new B(astream, this); 線:

myfile.cc:680:86: error: no matching function for call to ‘B::B(std::ostream*&, A* const)’
myfile.cc:680:86: note: candidates are:
myfile.h:194:2: note: B::B(std::ostream&, A*)
myfile.h:194:2: note:   no known conversion for argument 1 from ‘std::ostream* {aka std::basic_ostream<char>*}’ to ‘std::ostream& {aka std::basic_ostream<char>&}’

我不知道如何解決這個問題,並希望得到任何意見。

指針和引用不是一回事。 我可能會質疑你在這里做了什么,但要解決你的問題,請執行以下操作:

B *env = new B(*astream, this);

使用引用( 例如 std::ostream & )時,將應用正常變量的語法。

將來,您可以通過閱讀錯誤消息來解決您的錯誤。 錯誤“無已知轉換”表示您嘗試將一種類型分配給另一種不兼容的類型。 它告訴你兩種類型(一種是指針,另一種是引用)。 現在您對指針和引用有了更多了解,您希望將來能夠自己選擇這些錯誤。 =)

“astream”是一個指針。 B()構造函數需要引用。 所以,選擇是:

  • 將所有內容轉換為指針或引用
  • 每當需要引用時應用解除引用的指針:* astream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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