g++下模板编译错误:

kbsoft 2009-06-23 02:40:19
size_t add(pointer obj, size_t* _Pos = 0) //Only used for object(Base *) element, it rather an algorithm than a function member.
{
std::pair<iterator, iterator> p = std::equal_range(arr.begin(), arr.end(), obj, \
sortorder == 1? (_Pos ? sort_by_str_inc<pointer> : sort_by_cmpstr_inc<pointer>) : (_Pos ? sort_by_str_dec<pointer> : sort_by_cmpstr_dec<pointer>));

if (_Pos)
*_Pos = std::distance(arr.begin(), p.first) + 1;
if (p.first == p.second || allowdups())
{
iterator it = arr.insert(p.first, obj);
return std::distance(arr.begin(), it) + 1;
}
else
{
if (!_Pos)
delete obj;
}

return 0;
}




src/PtrArray.h: In member function `size_t PtrArray<T>::add(typename valuetype_traits<Ty>::value_type*, size_t*) [with T = String*]':
src/ptrarray.CPP:33: instantiated from here
src/PtrArray.h:402: error: insufficient contextual information to determine type
src/PtrArray.h:402: error: insufficient contextual information to determine type
src/PtrArray.h:402: error: insufficient contextual information to determine type
src/PtrArray.h:402: error: insufficient contextual information to determine type
GMAKE: *** [ptrarray.OBJ] Error 1


错误定位在
std::pair<iterator, iterator> p = std::equal_range(arr.begin(), arr.end(), obj, \
sortorder == 1? (_Pos ? sort_by_str_inc<pointer> : sort_by_cmpstr_inc<pointer>) : (_Pos ? sort_by_str_dec<pointer> : sort_by_cmpstr_dec<pointer>));

这一行上,不知为何原因?
...全文
760 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
老邓 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 luansxx 的回复:]
? : 操作符:两边必须是同一种类型,或者可以转换的类型
[/Quote]
学习了!
kbsoft 2009-06-23
  • 打赏
  • 举报
回复
楼上正解,太强了。
Fighting Horse 2009-06-23
  • 打赏
  • 举报
回复
? : 操作符:两边必须是同一种类型,或者可以转换的类型
taodm 2009-06-23
  • 打赏
  • 举报
回复
呃,直接用boost::ptrcontainer吧。
老邓 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 kbsoft 的回复:]
That's what I'm finding....
[/Quote]
搞定了?
kbsoft 2009-06-23
  • 打赏
  • 举报
回复
That's what I'm finding....
Jalien 2009-06-23
  • 打赏
  • 举报
回复
大哥等下把错误的原因贴一下吧,我上次也遇到模版类型推断的问题,也是VS编译通过但g++编译过不了。g++类型推断好像更严格。
老邓 2009-06-23
  • 打赏
  • 举报
回复
有课要走了,不好意思。
老邓 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 kbsoft 的回复:]
一些不必要的函数,你可以先屏蔽掉,例如void TestPtrArray()
[/Quote]
可是,太多头文件找不到,注释后出现大量错误。
你自己试着将pointer改一下,用19楼的代码试试,先缩小一下范围。
pathuang68 2009-06-23
  • 打赏
  • 举报
回复
kbsoft 2009-06-23
  • 打赏
  • 举报
回复
一些不必要的函数,你可以先屏蔽掉,例如void TestPtrArray()
yshuise 2009-06-23
  • 打赏
  • 举报
回复
源码贴全点,否则无法帮你调试。
kbsoft 2009-06-23
  • 打赏
  • 举报
回复
already sent, pls check it;)
老邓 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 kbsoft 的回复:]
谢谢,你的代码貌似只修改了std::pair <std::vector <pointer>::iterator, std::vector <pointer>::iterator> p?
[/Quote]
是的,因为我不知道你的pointer是什么东东。
kbsoft 2009-06-23
  • 打赏
  • 举报
回复
就是自己实现了一个纯粹的PtrArray,客户说一定要在GCC/VC下都编译通过,我郁闷呢
老邓 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 kbsoft 的回复:]
哥们儿,可否留个EMAIL,我把源码发你?
[/Quote]
给我看看:loaden AT gmail.com
kbsoft 2009-06-23
  • 打赏
  • 举报
回复
哥们儿,可否留个EMAIL,我把源码发你?
  • 打赏
  • 举报
回复
楼主,先说代码要干嘛?
kbsoft 2009-06-23
  • 打赏
  • 举报
回复
谢谢,你的代码貌似只修改了std::pair <std::vector<pointer>::iterator, std::vector<pointer>::iterator> p?
老邓 2009-06-23
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct pointer
{
};

size_t add(pointer obj, size_t* _Pos = 0) //Only used for object(Base *) element, it rather an algorithm than a function member.
{
std::pair <std::vector<pointer>::iterator, std::vector<pointer>::iterator> p = std::equal_range(arr.begin(), arr.end(), obj, \
sortorder == 1 ? (_Pos ? sort_by_str_inc <pointer> : sort_by_cmpstr_inc <pointer>) : (_Pos ? sort_by_str_dec <pointer> : sort_by_cmpstr_dec <pointer>));

if (_Pos)
*_Pos = std::distance(arr.begin(), p.first) + 1;
if (p.first == p.second || allowdups())
{
iterator it = arr.insert(p.first, obj);
return std::distance(arr.begin(), it) + 1;
}
else
{
if (!_Pos)
delete obj;
}

return 0;
}

int main()
{
cout << "Hello world!" << endl;
return 0;
}

看我代码,貌似类型推断问题已经没有了,但arr没有定义。
加载更多回复(18)

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧