2013-12-07 2 views
1

Почему это не работает?Функция друга C++

Я использую дружественную функцию в своем коде, но есть ошибка, поэтому я не могу ее найти. пожалуйста помоги.

#include<iostream> 
#include<cstdlib> 
using namespace std; 
class Circle{ 
private: 
    int x; 
public: 
    Circle(int x1=5){ 
     x=x1; 
     friend std:ostream & operator<<(const Circle & c, std::ostream & os) 
     { 
      return os<<c.x 
     } 
    } 
}; 
int main() 
{ 
    Circle s; 
    cout<< s; 
    system("pause"); 
    return 0; 
} 

ответ

3

Четыре проблемы:

  1. Вы определили функцию друга внутри конструктора. Переместите его снаружи так, чтобы это была его собственная функция.

  2. Заменить std:ostream с std::ostream

  3. Обмена порядок параметров.

  4. точку с запятой после return os<<c.x

Окончательный результат:

class Circle{ 
private: 
    int x; 
public: 
    Circle(int x1=5){ 
     x=x1; 
    } 
    friend std::ostream & operator<<(std::ostream & os, const Circle & c) 
    { 
     return os<<c.x; 
    } 
}; 
1
friend std:ostream & operator<<(const Circle & c, std::ostream & os) 
    { 
     return os<<c.x 
    } 

вы должны объявить эту функцию вне конструктора.

+0

Еще одна небольшая деталь: отсутствует точка с запятой после 'os << c.x'. –

+0

Извините, я просто скопировал функцию из кода, отправленного @Mat . Еще две ошибки в этой функции, которые я не отмечал, это точка с запятой после 'os << c.x' и порядок аргумента. – rajenpandit

1

Друг функция должна быть объявлена ​​на том же уровне, что и конструктор, а не внутри него.

Смежные вопросы