【发布时间】:2018-10-12 09:33:22
【问题描述】:
需要帮助找出以下源代码的问题所在。我有一个类来计算多个字符并将每个字符显示到控制台屏幕中。
但不幸的是,当我尝试编译时,我一直收到此错误消息
错误 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;
};
【问题讨论】:
-
你有
operator<<,而不是operator>>。 -
CharacterCounter的参数应该是const。 -
您正在为类定义
operator <<(输出),但在main中使用>>(输入)。你能解释一下为什么你认为这应该有效吗?或者你真的打算写while (cin >> character)而不是while (cin >> counter)? -
顺便说一句,您对
fCharacterCounts的初始化可能不正确。我假设您希望所有元素都为零?使用std::fill、std::fill_n甚至std::memset来“清除”数组。 -
如果你只想输出,那么overload只需要
operator<<。如果您只想输入,则仅重载operator>>。如果你想要输出和输入,都重载。没有任何规则或“标准说必须同时实现两者。
标签: c++ visual-c++ iostream