Не найден оператор, который принимает левый операнд типа c ++ - PullRequest
0 голосов
/ 02 мая 2018

Нужна помощь в выяснении, в чем проблема со следующим исходным кодом. У меня есть один класс для подсчета количества символов и отображения каждого из них на экране консоли.

Но, к сожалению, я продолжал получать это сообщение об ошибке, когда пытался скомпилировать

ошибка C2678: двоичный файл «>>»: не найден оператор, который принимает левый операнд типа «std :: istream» (или нет приемлемого преобразования)

Ниже приведены исходные файлы:

CharacterCounter.h

 #include <iostream>

 class CharacterCounter {
    public: 
      int fTotalNumberOfCharacters;
      int fCharacterCounts[256];  // hold all 256 byte values 

    public: 
      CharacterCounter();
      void count(unsigned char aCharacter);
      friend std::ostream& operator<<(std::ostream& aOStream, CharacterCounter& aCharacterCounter); 
    };

   }

CharacterCounter.cpp

    #include "CharacterCounter.h"
    #include <iostream>

    /// Constructor 
    CharacterCounter::CharacterCounter() {
      fTotalNumberOfCharacters = 0;
      for (int i=0; i < 256; i++) {
          fCharacterCounts[i] = i;
      } 
    }

    /// Counts the corresponding data member 
    void CharacterCounter::count(unsigned char aCharacter) {
      fTotalNumberOfCharacters++;
      fCharacterCounts[aCharacter]++;
    }

    /// Output stream displays characters greater than 0 
    std::ostream& operator<<(std::ostream& aOStream, const CharacterCounter& aCharacterCounter) {
      for (int i=0; i < 256; i++) {
        if (aCharacterCounter.fCharacterCounts[i] > 0) {
          int character = aCharacterCounter.fCharacterCounts[i]; 
          aOStream << (unsigned char)i << ":\t" << character << "\n"; 
        }
      } 

      return aOStream;
    }

main.cpp

    #include <iostream>
    #include <string>
    #include "CharacterCounter.h"

    using namespace std; 

    int main() {

      CharacterCounter counter; 
      unsigned char character;

    while (cin >> counter) { **Compilation error focuses here**
       counter.count(character);
    }

    cout << counter; 
    system("pause");

    return 0;
   };

1 Ответ

0 голосов
/ 02 мая 2018

Вам необходимо перегрузить оператор >> для вашего CharacterCounter, из-за cin >> counter, объявите его:

class CharacterCounter {
    public: 
//...
      friend std::istream& operator>>(std::istream& input, CharacterCounter& aCharacterCounter);
//...

А затем объявить перегрузку функции:

std::istream &operator>>( std::istream  &input, CharacterCounter& aCharacterCounter ) 
{ 
    input >> aCharacterCounter. fTotalNumberOfCharacters;
    // Or input something else or more
    return input;            
}
...