BCB5和BCB6中的traits重载问题

TopCat 2003-01-23 06:05:57
下面这个程序,是重载(继承)了char_traits从而实现对字符串的忽略大小写排序的例子。在BCB6下编译运行都正常。
-----------------------------------------
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <ctype.h> //for toupper function
using namespace std;

struct NoCase_char_traits : public char_traits<char>
{
static bool eq(const char_type& c1,const char_type& c2) { return toupper(c1) == toupper(c2); };

static bool lt(const char_type& c1,const char_type& c2) { return toupper(c1) < toupper(c2); };

static int compare(const char* s1, const char* s2, size_t n)
{
for (size_t i=0; i<n; ++i)
{
if (!eq(s1[i],s2[i]))
{
return lt(s1 [i],s2[i])?-1:1;
}
}
return 0;
}

static const char* find(const char* s, size_t n, const char& c)
{
for (size_t i=0; i<n; ++i)
{
if (eq(s[i],c))
{
return &(s[i]);
}
}
return 0;
}
};

int main()
{
typedef basic_string<char, NoCase_char_traits> mystring ;

vector<mystring> m_tempList;

m_tempList.push_back("a");
m_tempList.push_back("AB");
m_tempList.push_back("Bcd");
m_tempList.push_back("bDe");

sort(m_tempList.begin(), m_tempList.end(), less<mystring>());

for(int i = 0; i < m_tempList.size(); ++i)
{
cout << m_tempList[i].c_str() << endl;
}

system("PAUSE");
return 0;
}
----------------------------------
但是用bcb5编译,则会出现以下错误(Link Error):
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external 'std::basic_string<char, NoCase_char_traits, std::allocator<char> >::__nullref' referenced from G:\TEMP\1.OBJ
Error: Unresolved external 'std::basic_string<char, NoCase_char_traits, std::allocator<char> >::basic_string<char, NoCase_char_traits, std::allocator<char> >(const char *, const std::allocator<char>&)' referenced from G:\TEMP\1.OBJ
Error: Unresolved external 'std::basic_string<char, NoCase_char_traits, std::allocator<char> >::__getRep(unsigned int, unsigned int)' referenced from G:\TEMP\1.OBJ
Error: Unresolved external 'std::basic_string<char, NoCase_char_traits, std::allocator<char> >::operator =(const std::basic_string<char, NoCase_char_traits, std::allocator<char> >&)' referenced from G:\TEMP\1.OBJ
Error: Unresolved external 'std::basic_string<char, NoCase_char_traits, std::allocator<char> >::compare(unsigned int, unsigned int, const char *, unsigned int) const' referenced from G:\TEMP\1.OBJ

显然这是RW STL和STLport的版本问题。
但这个写法是Juttis在《C++标准程序库》里演示的标准写法,我想知道在BCB5里,应该如何写这个char_traits?
...全文
21 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
haha1020 2003-01-24
up!
  • 打赏
  • 举报
回复
Jim3 2003-01-24
不懂
学习
  • 打赏
  • 举报
回复
TopCat 2003-01-24
编译器不同是肯定的,否则升级干吗啊 :)
但这个问题我觉得更加是两个STL之间的区别所导致的问题。

STLport移植至SGI STL,一个公认“最符合标准”的STL(不过它的allocator...),所以这个做法没什么问题。问题是我不知道RW STL到底区别在哪里,为什么一个看似正常的traits重载却会导致错误。

难道没有人用过traits重载吗?
  • 打赏
  • 举报
回复
liye20000 2003-01-24
up一下吧,听说bcb6与5的编译器不同,也不知道是不是真的
  • 打赏
  • 举报
回复
copy_paste 2003-01-23
不懂。。。
  • 打赏
  • 举报
回复
halibut 2003-01-23
再UP!
  • 打赏
  • 举报
回复
TopCat 2003-01-23
没人?
up一下也好啊
  • 打赏
  • 举报
回复
xuii 2003-01-23
NO . 2
  • 打赏
  • 举报
回复
TopCat 2003-01-23
谢谢二位。我也up
  • 打赏
  • 举报
回复
halibut 2003-01-23
NO.2
UP!
  • 打赏
  • 举报
回复
s98231106 2003-01-23
NO。1
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ Builder
加入

1.3w+

社区成员

C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
申请成为版主
帖子事件
创建了帖子
2003-01-23 06:05
社区公告
暂无公告