これの何が問題なのかを把握するために、最後の 30 分間を費やしました。
.h ファイルから:
// H/T sent. d-linked list Set
#ifndef SET_H
#define SET_H
#include <iostream>
#include <string>
using namespace std;
typedef string ELEMENT_TYPE; // a set for string elements
class Set{
private:
struct Elem {
ELEMENT_TYPE info;
Elem *prev, *next;
};
Elem *_head, *_tail;
int _size;
void copyCode(const Set & v);
void destructCode();
ostream& dump(ostream& out, const Set &v);
public:
Set();
Set(const Set &rhs);
~Set();
Set& operator=(const Set &rhs);
bool insert(ELEMENT_TYPE);
bool erase(ELEMENT_TYPE);
void clear();
int size() const { return _size; }
bool find(ELEMENT_TYPE) const;
class Iterator{
private:
Elem * _cur;
public:
Iterator(){}
explicit Iterator( Elem* );
Iterator operator++( int );
Iterator operator++();
Iterator operator--( int);
Iterator operator--();
bool operator==( const Iterator& rhs );
bool operator!=( const Iterator& rhs );
ELEMENT_TYPE& operator*();
ostream& operator<< ( ostream& );
};
Iterator begin() const;
Iterator end() const;
friend ostream& operator<< (ostream&, Set&);
};
bool operator==(const Set&, const Set&);
bool operator!=(const Set&, const Set&);
Set operator&(const Set&, const Set&);
Set operator|(const Set&, const Set&);
#endif
.cpp ファイルから:
string& Set::Iterator::operator*(){
return _cur -> info;
}
ostream& Set::Iterator::operator<< ( ostream& os ){
os << _cur -> info << "\n";
return os;
}
test.cpp から:
Set s1;
s1.insert( "1" );
s1.insert( "2" );
s1.insert( "3" );
cout << "Hi\n";
Set::Iterator it = s1.begin();
while( it != s1.end() ){
cout << *it;
it++;
}
cout << "Bye\n";
私には、これは問題なく見え、以前に作成したすべての operator<< と同じように見えますが、コードを実行する test.cpp ファイルを実行すると、次のようなペースが得られます。
Hi
321Bye
これは明らかに、私が operator<< 定義で提供した情報ではありません。また、アクセスする値を「hi\n」などのダミー出力に置き換えてみました。ほとんど成功しません。これにより、定義が間違っていて、一般的な文字列出力演算子を使用していると思われます。
これは非常に単純な問題だと確信していますが、切望されている2番目の目を簡単にアクセスできません.
編集:コードは完璧であり(赤面)、質問は解決できないと述べている人もいますが、何が欠けているのかわからないので、完全なヘッダーファイルを含めました. 明らかなスペース上の理由から、.cpp は含めませんでした。問題が特定の領域にある可能性があると思われる場合は、喜んで私の定義を投稿します.
問題は、出力に改行が含まれていないことです。これは、演算子がまったく使用されていないことを示唆しています。それはなぜですか / 正しくオーバーロードしていないオペレーターに欠けているもの (JBently に感謝)
ありがとう!