模板 类型转换 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> ]
展开
 我来答
明快且轻巧的丁香g
2008-09-01 · TA获得超过264个赞
知道小有建树答主
回答量:516
采纳率:0%
帮助的人:572万
展开全部
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这种出错信息看着真累。。。你还是把出错的那行代码贴出来吧,看样子好像是没有匹配类型~~
博思aippt
2024-07-20 广告
作为深圳市博思云创科技有限公司的工作人员,对于Word文档生成PPT的操作,我们有以下建议:1. 使用另存为功能:在Word中编辑完文档后,点击文件->另存为,选择PowerPoint演示文稿(*.pptx)格式,即可将文档内容转换为PPT... 点击进入详情页
本回答由博思aippt提供
han3705392
2008-08-30
知道答主
回答量:43
采纳率:0%
帮助的人:0
展开全部
看不懂啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式