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;
}

2 ответа

Вы положили

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

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

В классе:

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

а потом

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

Пока ты там, мне интересно, должно ли это быть const?

вы, должно быть, забываете о пространстве имен try - std::ostream &operator<<(std::ostream &out)

Другие вопросы по тегам