2009-07-01 4 views
0

私は代入のためにコンパレータを構築していますが、これはシンプルに思えるので私の頭を引っ張っていますが、わかりません。C++ string.compare()

この機能は私に迷惑を与えている:

int compare(Word *a, Word *b) 
{ 
    string *aTerm = a->getString(); 
    string *bTerm = b->getString(); 

    return aTerm->compare(bTerm); 
} 

ワード:: getStringでは、文字列を返します*

エラー:関数定義の束に続く

In member function `virtual int CompWordByAlpha::compare(Word*, Word*)': 
    no matching function for call to... 

...。

助けが必要ですか?

+1

私はあなたがエラーメッセージの最も重要な部分を省略したと思います。 –

+0

次回はエラーメッセージ全体を投稿します! –

+0

あなたは賭けます。私は、文字列がC++の標準ライブラリの一部であるため、それが重要ではないと思っていました。クラスとその関数の問題ではないことは分かっていました。 –

答えて

5

文字列を文字列ポインタと比較していますが、これは無効です。あなたが望む

return aTerm->compare(*bTerm); 
+0

それはそれをしました。アスタリスクが必要な理由は分かりません.bTermはすでに文字列です。これは、basic_string :: compareメソッドが** basic_stringパラメータを必要としていることを意味しますか? –

+2

string :: compare()はポインタではなくパラメータとして文字列参照をとります。渡す* bTermはポインタを逆参照し、文字列ポインタではなく文字列オブジェクトを渡します。 –

+0

ああ、それは完璧な意味があります。ありがとうフレッド! –

3

*演算子の使い方が異なります。 "string * bTerm = b-> getString()"の*を使用すると、 "bTermは文字列へのポインタです"を意味します。 compare(* bTerm)内の*の使用は、単純にcompare(bTerm)を使用する代わりに、単に16進アドレスであるbTerm自体の値を比較しようとするのではなく、 "bTermが指し示す位置の値をとる"ことを意味します。

また、これは、その呼び出しの左側に起こっている:

aTerm->compare(*bTerm); //this statement 
(*aTerm).compare(*bTerm); //is the same as this statement 

- >演算子は、単に必要なタイピングの量を減らすことができます。

P.S.:この種のものは、Googleやプログラミングの教科書から簡単に理解できました。他の人は同意しないかもしれませんが、完全に基本的な構文についての質問はStack Overflow上にあるとは思われません。

+0

私はまずJavaを学びましたが、私はC++を始めているので、ポインタと参照を意識して管理することに慣れています。私はフレッドの答えが非常に私のプログラムをコンパイルするための助けに役立つことがわかった、と私はあなたの非常に有益なことがわかった。 出力の印刷方法を教えてください。 ;) –

+0

出力をstd :: coutで出力します。 –