2011-12-16 5 views
5

現在、私はC++の標準ライブラリのインクルードを禁止するプロジェクトに取り組んでいます。私たちが使用しているコンパイルされたファイルの1つは、以下のシンボルをリストしています: _Xran__Q2_3std12_String_baseCFvC++でインクルードされたシンボルのソースを調べる

これは標準的なライブラリ文字列に関係していると思います。私はそう思って間違っていますか?もしそうでなければ、誰もこのシンボルが含まれていたポイントをたどる効果的な方法を知っていますか?コードベースの大雑把な検索では、何も明らかではありません。

+0

これは、 'std :: _ St​​ring_base'に関連する何かのために、あいまいな名前のように見えます。あなたが私を引用して行く前に、VSがどのように名前を変えるのか分かりません。 – cHao

+0

どのオブジェクトファイルがあるのか​​知っていますか、どの '#include'が責任を持っているのかを知る必要がありますか、またはオブジェクトファイルを見つけようとしていますか? –

+0

この質問を参照してください:http://stackoverflow.com/questions/5310590/build-problem-in-visual-studio-2010 –

答えて

2

これはVCマングリングではないようですが、常に疑問符で始まります。奇妙な何

$ c++filt --format=gnu "_Xran__Q2_3std12_String_baseCFv" 
std::_String_base::_Xran(const(void)) 

を実行することによって提案されたとしてそれは、しかし、スキームをマングリング++ Gに適合しない

_Xranstd::stringのためのVCの実装の一部と思われることです。

とにかく、探しているヘッダーはおそらく#include <string>です。

EDIT: C++ filtの出力結果 - VC++でコンパイルされていることを確認してください。 string.hのは、確かにいくつかの場所で含まれている場合は

+1

ほとんどのC++標準ライブラリの実装は、元のSGIバージョンのSTLから大量のものを借りているので、VCとC++の両方で同じ名前の_Xranを見つけることはあまり驚くことではありません。 –

+0

私はVC頭字語を認識しません。明確にすることはできますか? – Greg

+0

VC = Visual C/C++; Visual StudioパッケージのC++コンパイラ – user1071136

0

は、あなたが見つけることができる場所:、これを

using namespace std;class string;struct{void hxtestfunc(void){typedef string hxtesttype;}}; 

をコンパイル:次のコードごと#includeディレクティブの後の次の行に

場所string.h(またはstring.hを直接または間接的に含むファイル)が以前のどこかに含まれていた場合にのみ、 "あいまいなシンボル"エラーを生成します。

したがって、最初に報告された「あいまいな記号」エラーは、重要な包含の直後にあなたにつながります。あなたが正規表現に置き換えた検索&を使用することができますVisual C++で

を交換してください "{。#には、*}"

名前空間stdをnusing

「\ 0 \と;クラス文字列; struct {void htestfunc(void){typedef string htesttype;}}; "

+0

''はCヘッダです。あなたはおそらく ''について話しています。 – cHao

+0

それはプラットフォームにはまったく依存しませんが、すべての#includeを医師に激しく労働集約します。フィニッシュに賢く賢い、重点を置く。 – Greg

関連する問題