2017-12-18 25 views
0

これはおそらく愚かな間違いですが、私はそれを修正することができませんでした。 https://github.com/jlettvin/Greased-Grepファイル:で他にクラスファイルが存在する場合、そのオブジェクトファイルにクラスメソッドが存在しないのはなぜですか?

その上に "負荷" 方法

$ nm gg_state.o|grep load 

されている間gg_state.h/gg_state.cpp "追跡" 方法はgg_state.o

$ nm gg_state.o|grep follow 

から存在しませんプレゼント。目視検査では、以下のメソッドがgg_state.oに表示されます。

一時的に、followのコードはgg.cppに複製されてコンパイルされますが、gg_state.cppに属します。メソッドを実装するコードは、両方のファイルの最後にあり、同一です。コンパイラが重複した定義で失敗することはありません。これは、コンパイラがgg_state.cppの後続のコードだけを無視していることを示す第2の指標です。

このメソッドの元の名前は検索であり、C++正規表現との競合を避けるために、名前が次のように変更されました。

gg.cppに必要なコードがありますが、このメソッドはgg_state.oに表示されるため、プログラムは正しく実行されます。

このアプリケーションは、g ++ 7.1.0 --std = C++ 17を使用してubuntu linux 16.04でコンパイルされ、実験的/ファイルシステムとfmt/printfが必要です。テストフレームワークはcatch.hppですが、テストはまだ堅牢ではありません。

nmの出力にfollowメソッドが表示されないのはなぜですか?

+0

ここに直接ポストコードを記入してください。外部リンクは推奨されません。 –

+0

"C++の正規表現と衝突する可能性があります"とは意味がありません。どのような葛藤ですか? –

答えて

2
void 
    follow (void* a_pointer, auto a_bytecount, const char* a_label=""); 

autoパラメータは、これが省略された関数テンプレートであることを意味します。コンセプトTS以外のもののサポートは、GCC拡張です。

これは関数テンプレートなので、テンプレートを置くことができる場所と置けない場所に関する通常の規則が適用されます。

+0

ありがとう、T.C.それはうまくいった。 – jlettvin

関連する問題