我正在努力将一些旧代码带到C++Builder XE7环境中。当我用低级i/o库编译一个小的独立工具时,我得到了这个错误:
[ilink32 Error] Error: Unresolved external 'std::char_traits<char>::assign(char *, unsigned int, char)' referenced from <library>|mydate
mydate类并不是非常复杂,而且只有一个函数真正使用了STL类,string (令人惊讶!)如果我注释掉一个函数的内容,错误就会消失。该代码粘贴在下面,但在您查看它之前,有几件事需要注意:
所以,这就是它。你能告诉我为什么这会导致上面的链接错误吗?
非常感谢!
-Karen
string myDate::Format(const char* format) const
{
string output;
if (julian == 0)
return output;
while (format[0] != '\0')
{
if (format[0] == 'm')
{
if (format[1] == 'm')
{
if (format[2] == 'm')
{
if (format[3] == 'm')
{
// mmmm Full name of month.
output += CMonthName();
format += 4;
}
else
{
// mmm Three letter abbreviation of month.
output += CMonthAbbr();
format += 3;
}
}
else
{
// mm Two digit month (zero fill).
const char* ptr = CMonth();
if (ptr[1] == '\0')
output += '0';
output += ptr;
format += 2;
}
}
else
{
// m One or two digit month (blank fill).
const char* ptr = CMonth();
if (ptr[1] == '\0')
output += '0';
output += ptr;
format += 1;
}
}
else if (format[0] == 'd')
{
if (format[1] == 'd')
{
if (format[2] == 'd')
{
if (format[3] == 'd')
{
// dddd Full name of day of week.
output += CDayName();
format += 4;
}
else
{
// ddd Three letter abbreviation of day of week.
output += CDayAbbr();
format += 3;
}
}
else
{
// dd Two digit day of month (zero fill).
const char *ptr = CDay();
if (ptr[1] == '\0')
output += '0';
output += ptr;
format += 2;
}
}
else
{
// d One or two digit day of month (blank fill).
const char *ptr = CDay();
if (ptr[1] == '\0')
output += ' ';
output += ptr;
format += 1;
}
}
else if (format[0] == 'y')
{
if (format[1] == 'y')
{
if (format[2] == 'y')
{
if (format[3] == 'y')
{
// yyyy Four digit year.
output += CYear();
format += 4;
}
else
{
// yyy Not valid (use \y\y\y for yyy)
return string();
}
}
else
{
// yy Two digit year (zero fill).
const char *ptr = CYearAbbr();
if (ptr[1] == '\0')
output += '0';
output += ptr;
format += 2;
}
}
else
{
// y Not valid (use \y or y)
return string();
}
}
else if (format[0] == '\\')
{
if (format[1] != '\0')
{
output += format[1];
format += 2;
}
}
else if (format[0] == ';')
{
// ignore rest of format text
break;
}
else
{
output += format[0];
format += 1;
}
}
return output;
}
发布于 2016-03-06 20:49:27
在E:\Embarcadero\RAD Studio\8.0\include\boost_1_39\boost\test\utils\basic_cstring\basic_cstring.hpp,的赋值运算符部分中,添加以下行:
返回赋值( basic_cstring& const& s){ *this = basic_cstring( s.begin(),s.end() );basic_cstring *this;}
这对我很有效!
发布于 2019-05-17 03:17:38
我只是遇到了一个非常类似的问题,我想我应该分享我的解决方案
在“投影选项”>“C++链接器”下,我启用了“使用动态RTL链接”,它很高兴地开始了链接
https://stackoverflow.com/questions/31148474
复制相似问题