2015-12-04 5 views
0

Я ученик. Я работаю над перегрузкой оператора. Я пытаюсь написать код для перегрузки [] и распечатать элементы в массиве-члене. Но когда я перегружаю < <, чтобы напечатать массив элементов, я получаю ошибку, ostream & не имеет типа. Что я здесь делаю неправильно? Также, что я могу сделать, если у меня есть класс с двумя массивами-членами? Вот мой код ниже:ostream & не называет ошибку типа. Что я здесь делаю неправильно?

#include <iostream> 
#include <cassert> 
class Digit 
{ 
private: 
    int digit1[3]{0}; 

public:  
    int& operator[](const int index); 

    ostream& operator<<(ostream& out); 
}; 

int& Digit::operator[](const int index) 
{ 
    return digit1[index]; 
} 

ostream& Digit::operator<<(ostream& out) 
{ 
    int loop; 
    out << "{"; 
    for (loop = 0; loop < 10; loop++) 
    { 
     out << digit1[loop] << " "; 
    } 
    out << "}"; 

    return o; 
} 

int main() 
{ 
    using namespace std; 

    Digit n; 
    n[0] = 4; 
    n[1] = 3; 
    n[2] = 4; 


    n << cout; 

    return 0; 
} 
+4

Возможно, просто отсутствует пространство имен 'std :: ostream' –

+0

Перегрузка должна быть свободной, поэтому вы можете следовать стандартным шаблонам' cout << n; '. – molbdnilo

+1

'operator <<' не должен быть функцией-членом. Вы хотите написать 'stream << object', а не' object << stream' –

ответ

2

Вы поставили

int main() 
{ 
    using namespace std; 
    //.... 

Это нельзя увидеть, где Вы заявляете ваш оператор <<. Одним из решений является изменение подписи включить namesape:

В классе:

std::ostream& operator<<(std::ostream& out) 

, а затем

std::ostream& Digit::operator<<(std::ostream& out) 

Пока вы там, я думаю, это должно быть const?

+0

Это сработало. Но все же, когда переменная-член не является массивом. он работал без указанного пространства имен. почему это? –

+0

Вам нужно задать новый вопрос, разместив точный код, который не удался. – doctorlove

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

  • Нет связанных вопросов^_^