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?
...全文
42 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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