2013-09-27 4 views
0

У меня есть следующий код:Нет известно преобразование из станд :: ostream * в 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); линии:

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

I «Не знаю, как решить эту проблему, и был бы признателен за любой вклад.

ответ

2

Указатели и ссылки - это не одно и то же. Я мог бы вопрос именно то, что вы здесь делаете, но, чтобы решить вашу проблему, как она стоит, это сделать:

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

При использовании ссылки (напримерstd::ostream &), синтаксис нормальных переменных применяется.

В дальнейшем вы можете решить свою ошибку, прочитав сообщение об ошибке. Ошибка «неизвестное преобразование» означает, что вы пытаетесь присвоить один тип другому типу, который несовместим. Он сообщает вам два типа (один - это указатель, а другой - ссылка). Теперь вы знаете немного больше о указателях и ссылках, вы, надеюсь, соберете эти ошибки в будущем. =)

+0

Ого я чувствую немой. Конечно ... Спасибо. И да, код, как он есть (в вопросе), не имеет смысла, я знаю: P –

+0

@AlexBrooks Я имел в виду, что это комментарий, что нет смысла хранить указатель на поток. Вам нужна очень хорошая причина. Возможно, вы делаете это, потому что вы не знаете о списках инициализации в конструкторе. – paddy

0

"astream" - указатель. B() ожидает ссылки. Таким образом, выбор:

  • Преобразовать все, чтобы указатели или ссылки
  • Применить разыменованный указатель всякий раз, когда вам нужна ссылка: * astream
Смежные вопросы