2015-03-19 2 views
0

В настоящее время, изучая C++, я пытаюсь создать два класса Bit и BitBuffer для работы с битовыми потоками.Перегрузка оператора ввода FIFO

Мой класс Bit составлен одним unsigned char.
Принцип состоит в том, чтобы отправить Bit s одному объекту BitBuffer и когда 8 Bit s находятся в одном BitBuffer объект, я выворачиваю буфер.

Я пытаюсь перегрузить оператор ввода для BitBuffer класса, потому что я хотел бы, чтобы иметь возможность написать следующие команды:

Bit x; 
BitBuffer buffer; 
x >> buffer; 

Я написал один enqueue метод, так что я думаю, я просто должен вызвать этот метод в моем перегруженном операторе. Однако, когда я набираю эти команды сейчас, Xcode сообщает мне «Недопустимые операнды для двоичного выражения».

Я попытался понять эту ошибку, но не могу понять, почему Xcode сообщает мне, что я использую функцию как переменную.

Любая помощь была бы более чем приветствуется,
Заранее спасибо!

+0

У Xcode есть преимущество, у него есть код. Как вы ожидаете, что кто-нибудь угадает, что происходит из вашего описания? –

+0

Я думал, что я дал достаточно информации, но опубликую полный код, если он может помочь – filaton

+1

Устраните все, что не нужно, чтобы продемонстрировать проблему! –

ответ

1

Вы должны убедиться, что есть где-то operator>>, который принимает Bit в качестве первого аргумента и BitBuffer как второй. Скорее, хотя, вы хотите отменить эти аргументы и записать выражение как:

buffer << x; 

, потому что тогда вы также можете цепь несколько битов в буфер:

buffer << x << y << z; 

Если у вас есть написал оператор на BitBuffer класс следующим образом:

class BitBuffer { 
public: 
    BitBuffer& operator<<(const Bit& b) { 
     // do your work here 
     return *this; 
    } 
}; 
+0

Большое спасибо! Я всегда видел, что оператор '<<' перегружен как 'friend istream & operator >> (istream &, myType &); поэтому я не знал, что можно было перегрузить его так же, как и вы. Я попробую это и дам вам знать, если это сработает. – filaton

+0

Запись оператора в качестве функции друга (в вашем случае подпись 'BitBuffer & operator << (BitBuffer &, const Bit &)' является еще одним вариантом и, возможно, лучшим выбором (хотя мне легче сначала написать его, в моем ответе, а затем переместите его как функцию друга). –

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