我正在使用Solaris 10上的旧Solaris编译器编写一些遗留代码(这里没有新的C++0x;-)
-bash-3.2美元CC-V
抄送:Sun C++5.12 SunOS\u sparc 2011/11/16
我有一个带迭代器的第三方字典类
template<K, V>
class DictIterator
{
public:
DictIterator(TheDictClass<K, V>& collection);
K key() const;
V value() const;
// advance the iterator. return true if iterator points to a valid item
bool operator()();
...
};
我的代码应该遍历字典中的每一项,但有一个编译错误,我无法解释:
DictIterator iterator(theDictionary);
while(iterator())
{
cout << iterator.key();
}
故障原因
"filename.cc", line 42: Error: The operation "ostream_withassign<<Key" is illegal.
但这个版本有效:
DictIterator iterator(theDictionary);
while(iterator())
{
Key key(iterator.key());
cout << key;
}
显然我有一个解决办法,但我想
DictIterator.key()
返回a
K
(不是参考),这两个片段非常相似。有没有人能告诉我,我刚刚碰到了C++的哪个奇怪的角落?
编辑:回答评论,
<<
被覆盖
ostream& operator(ostream &, Key&);