模板 类型转换 C++
下面的代码在vc6中可以编译,但是在vs2005中无法编译:IXMLElement*XMLElement::AddChildElement(conststd::strin...
下面的代码在vc6中可以编译,但是在vs2005中无法编译:
IXMLElement* XMLElement::AddChildElement(const std::string& path) {
char* dot = strchr((char *)path.data(), '.');
if (dot != NULL) {
IXMLElement* elem = AddChildElement(std::string(path.begin(), std::string::const_iterator(dot)));
if (elem == 0) {
elemLogger.UpdateLog(GetName() + "::AddChildElement: cannot add node with path " + path + "...");
return 0;
}
return elem->AddChildElement(std::string(std::string::const_iterator(++dot), path.end()));
}
}
报错为:
error C2440: “<function-style-cast>”: 无法从“char *”转换为“std::_String_const_iterator<_Elem,_Traits,_Alloc>”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Alloc=std::allocator<char>
2> ]
2> 无构造函数可以接受源类型,或构造函数重载决策不明确
2> error C2440: “<function-style-cast>”: 无法从“char *”转换为“std::_String_const_iterator<_Elem,_Traits,_Alloc>”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Alloc=std::allocator<char>
2> ]
2> 无构造函数可以接受源类型,或构造函数重载决策不明确
2> error C2440: “<function-style-cast>”: 无法从“char *”转换为“std::_String_const_iterator<_Elem,_Traits,_Alloc>”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Alloc=std::allocator<char>
2> ]
2> 无构造函数可以接受源类型,或构造函数重载决策不明确
这里使用的模板std标准模板,编译时候就是无法将char*指针转换为String_const_iterator?
请高手帮忙解决
按照一楼朋友的方法修改之后,问题依然存在:
下面是编译错误的内容:
error C2665: “std::basic_string<_Elem,_Traits,_Ax>::basic_string”: 13 个重载中没有一个可以转换所有参数类型
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Ax=std::allocator<char>
2> ]
2> C:\Program Files\Microsoft Visual Studio 8\VC\include\xstring(599): 可能是“std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &,unsigned int,unsigned int)”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Ax=std::allocator<char>
2> ] 展开
IXMLElement* XMLElement::AddChildElement(const std::string& path) {
char* dot = strchr((char *)path.data(), '.');
if (dot != NULL) {
IXMLElement* elem = AddChildElement(std::string(path.begin(), std::string::const_iterator(dot)));
if (elem == 0) {
elemLogger.UpdateLog(GetName() + "::AddChildElement: cannot add node with path " + path + "...");
return 0;
}
return elem->AddChildElement(std::string(std::string::const_iterator(++dot), path.end()));
}
}
报错为:
error C2440: “<function-style-cast>”: 无法从“char *”转换为“std::_String_const_iterator<_Elem,_Traits,_Alloc>”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Alloc=std::allocator<char>
2> ]
2> 无构造函数可以接受源类型,或构造函数重载决策不明确
2> error C2440: “<function-style-cast>”: 无法从“char *”转换为“std::_String_const_iterator<_Elem,_Traits,_Alloc>”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Alloc=std::allocator<char>
2> ]
2> 无构造函数可以接受源类型,或构造函数重载决策不明确
2> error C2440: “<function-style-cast>”: 无法从“char *”转换为“std::_String_const_iterator<_Elem,_Traits,_Alloc>”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Alloc=std::allocator<char>
2> ]
2> 无构造函数可以接受源类型,或构造函数重载决策不明确
这里使用的模板std标准模板,编译时候就是无法将char*指针转换为String_const_iterator?
请高手帮忙解决
按照一楼朋友的方法修改之后,问题依然存在:
下面是编译错误的内容:
error C2665: “std::basic_string<_Elem,_Traits,_Ax>::basic_string”: 13 个重载中没有一个可以转换所有参数类型
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Ax=std::allocator<char>
2> ]
2> C:\Program Files\Microsoft Visual Studio 8\VC\include\xstring(599): 可能是“std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &,unsigned int,unsigned int)”
2> with
2> [
2> _Elem=char,
2> _Traits=std::char_traits<char>,
2> _Ax=std::allocator<char>
2> ] 展开
2个回答
展开全部
IXMLElement* elem = AddChildElement(std::string(path.begin(), std::string::const_iterator(dot)));
问题是出在这句吧。
既然是string,你直接用path.find('.')就可以返回第一个指向'.'的迭代器了啊,当然,find还有重载的函数,主要是指定范围。
IXMLElement* elem = AddChildElement(std::string(path.begin(),path.find('.')));
应该就可以了。
-----------------------------------------------------------------
05这种出错信息看着真累。。。你还是把出错的那行代码贴出来吧,看样子好像是没有匹配类型~~
问题是出在这句吧。
既然是string,你直接用path.find('.')就可以返回第一个指向'.'的迭代器了啊,当然,find还有重载的函数,主要是指定范围。
IXMLElement* elem = AddChildElement(std::string(path.begin(),path.find('.')));
应该就可以了。
-----------------------------------------------------------------
05这种出错信息看着真累。。。你还是把出错的那行代码贴出来吧,看样子好像是没有匹配类型~~
博思aippt
2024-07-20 广告
2024-07-20 广告
作为深圳市博思云创科技有限公司的工作人员,对于Word文档生成PPT的操作,我们有以下建议:1. 使用另存为功能:在Word中编辑完文档后,点击文件->另存为,选择PowerPoint演示文稿(*.pptx)格式,即可将文档内容转换为PPT...
点击进入详情页
本回答由博思aippt提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询