0

我有以下代码:

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);在线上收到以下错误:

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>&}’

我不确定如何解决这个问题,并希望有任何意见。

4

2 回答 2

2

指针和引用不是一回事。我可能会确切地质疑您在这里所做的事情,但是要解决您的问题,请执行以下操作:

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

当使用引用(例如 std::ostream &)时,正常变量的语法适用。

将来,您可以通过阅读错误消息来解决您的错误。错误“没有已知的转换”意味着您试图将一种类型分配给另一种不兼容的类型。它告诉您两种类型(一种是指针,另一种是引用)。现在您对指针和引用有了更多的了解,希望您将来能自己找出这些错误。=)

于 2013-09-27T21:43:37.287 回答
0

“astream”是一个指针。B() 构造函数需要一个引用。所以,选择是:

  • 将所有内容转换为指针或引用
  • 每当需要引用时应用取消引用的指针:*astream
于 2013-09-27T21:45:55.360 回答