問題。
以下のコードを参照してください...return field;
ステートメントが欠落しており、いくつかのデバッグ実行でそれを見つけられませんでした。そのようなものがエラーなしでコンパイラを通過するとは思いもしませんでした! なぜそれをしたのですか?
説明std::tr1::function
構築時に変換アルゴリズムを受け取るために
使用するパーサー オブジェクトがあります。変換は、文字列から、さまざまな型を保持できるTransportableMessage
で構成されるtype のオブジェクトに変換しTMFields
ます。フィールドのタイプは (XML からの) 文字列に基づいているため、フィールドを作成するためのファクトリ関数を作成しました。
tstring
オブジェクトはに基づいた型キャストでありUNICODE
、基本的に at the minutes に解決さstd::wstring
れます。また、私は VS2008 を使用していないため、アップグレードを容易にし、発生する可能性を高めるために背後にunique_ptr
隠れています。std::auto_ptr
ScopedPtr_t
namespace arc
{
namespace util
{
int internalTest()
{
std::cout << "Any error?" << std::endl;
}
ScopedPtr_T<TMField> TmFieldFactory( const tstring& name, const tstring& typeName, const tstring& value )
{
ScopedPtr_T<TMField> field;
int a = internalTest();
if( typeName == _T("int") || typeName == _T("long") )
{
field.reset( new TMNumericField( name, boost::lexical_cast<__int64>(value) ) );
}
else if( typeName == _T("string") )
{
field.reset( new TMStringField( name, value ) );
}
else if( typeName == _T("timestamp") )
{
field.reset( new TMTimeField( name, boost::lexical_cast<__int64>(value) ) );
}
else
{
std::string info( __FILE__ " :: " __FUNCTION__ " : Unrecognized TmField type ");
std::string type( typeName.begin(), typeName.end() );
info += type;
throw ARC_Exception( info.c_str() );
}
return field; // I WAS MISSING THIS!
}
}
}
基本的に、他の誰かがこれに問題を抱えているかどうか知りたいですか? internalTest
問題が s 固有のものかどうかを確認する関数を導入しましたscoped_ptr
が、そうではないようです。GCCでも使用internalTest
してみましたが、エラーが返されました。Visual Studio がこれにフラグを立てなかったのはなぜですか? オンにできるコンパイル設定がどこかにありませんか? 標準はこれを許可していますか?これがよく知られていることである場合はお詫びします。Google で検索して、ここで回答を探します。
編集::コードの呼び出し- より多くのコンテキストのためにこれを追加するだけです。
SharedPtr_T<TransportableMessage> strToTmConvFunc_Default_Apc7_0(const std::string& tm_str)
{
pugi::xml_document xmlDoc;
if( false == xmlDoc.load( tm_str.c_str() ) )
{
ARC_LOG(LOG_WARN, "The passed TM object was malformed. %s", tm_str.c_str() );
throw ARC_Exception( "Malformed Transportable Message XML" );
}
pugi::xml_node tmBase = xmlDoc.first_child();
std::string xmlRootName( tmBase.name() );
if( xmlRootName.compare("TM") != 0 )
{
ARC_LOG(LOG_WARN, "The passed TM object was malformed. %s", tm_str.c_str() );
throw ARC_Exception( "Malformed Transportable Message XML" );
}
std::string tmname = tmBase.child("N").child_value();
std::string entity = tmBase.child("E").child_value();
ARC_LOG(LOG_INFO, "TM message received for parsing. TM name is %s", tmname.c_str() );
tstring t_tmname( tmname.begin(), tmname.end() );
SharedPtr_T<TransportableMessage> tm_obj( new TransportableMessage( t_tmname, 0 ) );
pugi::xml_node fields = tmBase.child("FS");
for( pugi::xml_node field = fields.first_child(); field; field = field.next_sibling("field") )
{
tm_obj->addField( arc::util::TmFieldFactory( field.child_value("N"), field.child_value("T"), field.child_value("V") ) );
}
return tm_obj;
}