[解決済み】非静的メンバ関数の無効な使用 【重複あり
2021-12-31 09:07:41
質問
class Bar
{
public:
pair<string,string> one;
std::vector<string> cars;
Bar(string one, string two, string car);
};
class Car
{
public:
string rz;
Bar* owner;
Car(string car, Bar* p);
};
class Foo
{
public:
Foo ( void );
~Foo ( void );
int Count ( const string & one, const string & two) const;
int comparator (const Bar & first, const Bar & second) const;
std::vector<Bar> bars;
};
int Foo::comparator(const Bar & first, const Bar & second) const{
return first.name < second.name;
}
int Foo::Count ( const string & one, const string & two ) const{
int result=0;
Bar mybar = Bar( one, two, "" );
std::vector<Bar>::iterator ToFind = lower_bound(bars.begin(), bars.end(), mybar, comparator);
if (ToFind != bars.end() && ToFind->one == mybar.one ){
result = ...
}
return result;
}
メソッド
Foo::Count
を使用する必要があります。
std::lower_bound()
にある要素を見つけるために
vector<Bar>
2つの文字列のペアに従って さて、うまくいかない部分です。このような場合
lower_bound()
メソッドを提供しています。
comparator()
. 大丈夫かと思いきや、g++が言う。
c.cpp: In member function ‘int Foo::Count(const string&, const string&) const’:
c.cpp:42:94: error: invalid use of non-static member function
std::vector<Bar>::iterator ToFind = lower_bound(bars.begin(), bars.end(), mybar, comparator);
そして、そのメソッド
Count()
のままでなければなりません。
const
...
解決方法は?
を作成する必要があります。
Foo::comparator
を静的に配置するか
std::mem_fun
クラスオブジェクトを作成します。これは
lower_bounds()
は、比較対象が関数ポインタやファンクタオブジェクトのような呼び出し演算子を持つオブジェクトのクラスであることを期待します。また、C++11以降を使用している場合は、次のようにすることもできます。
dwcanillas
は、ラムダ関数を使用することを提案しています。また、C++11では
std::bind
もあります。
例
// Binding:
std::lower_bounds(first, last, value, std::bind(&Foo::comparitor, this, _1, _2));
// Lambda:
std::lower_bounds(first, last, value, [](const Bar & first, const Bar & second) { return ...; });
関連
-
[解決済み】 mean() 警告:引数が数値または論理でない:NAを返す
-
[解決済み】「g++」が内部コマンド、外部コマンド、操作可能なプログラム、バッチファイルとして認識されない。
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] 関数のパラメータに 'const' を使用する
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
-
[解決済み】静的定数文字列(クラスメンバ)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スクリプトとバッチ処理がひとつに
-
linux シェル学習ノート 4日目
-
[解決済み】主成分分析:colMeans(x, na.rm = TRUE)のエラー:'x'は数値でなければなりません。
-
[解決済み】アプリケーション起動メソッドで例外が発生 java.lang.reflect.InvocationTargetException
-
[解決済み】c++のコンパイルエラーです。ISO C++はポインタと整数の比較を禁止しています。
-
[解決済み】rmarkdownエラー "長さ0の変数名を使おうとした"
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】ウィンドウ階層にないビューを持つUIViewControllerでUIViewControllerを表示しようとする
-
[解決済み] [Solved] libpthread.so.0: error adding symbols: コマンドラインからDSOが見つからない