問題。 看到下面的代碼...我錯過了return field;
聲明,並沒有發現它的幾個調試運行。我永遠不會認爲像這樣的東西會通過編譯器沒有錯誤!爲什麼呢?Visual Studio - 無法返回值時無編譯錯誤
說明 我有一個使用std::tr1::function
有收到建設變換算法的解析器對象。該翻譯從字符串轉換爲類型爲TransportableMessage
的對象,該對象由TMFields
組成,該對象可以具有不同的類型。所以無論如何,我創建了一個用於創建字段的工廠函數,因爲字段的類型基於一個字符串(來自XML),儘管現在只有少數幾個,但未來可能會有更多。
tstring
對象是基於UNICODE
的類型轉換,基本上在一分鐘內解析爲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
以查看問題是否特定於scoped_ptr
s,但看起來不是這樣。我也嘗試在GCC中使用internalTest
,它返回一個錯誤。 爲什麼Visual Studio沒有標記這個?我是否在某處可以打開編譯設置?標準是否允許這樣做?道歉,如果這是衆所周知的,我沒有谷歌,並在這裏尋找答案。
編輯::調用代碼 - 只需添加更多的上下文。
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;
}
也許這是因爲你沒有什麼導致該模板的實例? – 2012-08-07 17:58:43
你有[警告高](http://stackoverflow.com/a/399865/168175)? – Flexo 2012-08-07 17:59:39
@pwny - 很確定我是在實例化模板,但我添加了'internalTest'函數來刪除它。 @Flexo - 我沒有。我把它變成了W4。由於庫代碼,無法使用WX。即使在W4上,也沒有提到缺失的回報。 – Dennis 2012-08-07 18:04:51