Word
ac 文字列を処理し、、、、演算子をオーバーロードする、
というクラスを<
作成しています。>
<=
>=
word.h
:
friend bool operator<(const Word &a, const Word &b);
word.cc
:
bool operator<(const Word &a, const Word &b) {
if(a == NULL && b == NULL)
return false;
if(a == NULL)
return true;
if(b == NULL)
return false;
return strcmp(a.wd, b.wd) < 0; //wd is a valid c string, EDIT: changed to strcmp
}
main
:
char* temp = NULL; //EDIT: i was mistaken, temp is a char pointer
Word a("blah"); //a.wd = [b,l,a,h]
cout << (temp<a);
operator<
の最後の行の後、メソッドの最初の行の前にセグメンテーション エラーが発生しますmain
。書くことで問題を修正できます
cout << (a>temp);
はoperator>
同様に定義されており、エラーは発生しませんが、割り当てが(temp < a)
機能する必要があるため、ここで助けを求めます。
編集:私は初めて間違いを犯し、 temp は typeWord
だと言いましたが、実際には typechar*
です。Word
したがって、コンパイラはコンストラクタの 1 つを使用してtemp を a に変換すると仮定します。最初のパラメーターが ではないため、どちらを使用するのか、なぜこれが機能するのかわかりませんWord
。
Word
これが、 usingを作成するために使用されていると思われるコンストラクターですtemp
。
Word::Word(char* c, char* delimeters="\n") {
char *temporary = "\0";
if(c == NULL)
c = temporary;
check(stoppers!=NULL, "(Word(char*,char*))NULL pointer"); // exits the program if the expression is false
if(strlen(c) == 0)
size = DEFAULT_SIZE; //10
else
size = strlen(c) + 1 + DEFAULT_SIZE;
wd = new char[size];
check(wd!=NULL, "Word(char*,char*))heap overflow");
delimiters = new char[strlen(stoppers) + 1]; // EDIT: changed to []
check(delimiters!=NULL,"Word(char*,char*))heap overflow");
strcpy(wd,c);
strcpy(delimiters,stoppers);
count = strlen(wd);
}
wd
タイプですchar*
この大きな質問を見て、助けようとしてくれてありがとう。確認するコードがさらに必要な場合はお知らせください