Разработчик StringUtils разработал очень плохой API. Ни один из шаблонных стандартных типов библиотек не должен использоваться в открытом интерфейсе API. std::string
встроен. Таким образом, если используемый вами компилятор и библиотеки - это не тот же компилятор и библиотеки, которые используются разработчиком StringUtils, типы могут и, вероятно, будут отличаться. По сути, разработчик StringUtils не смог отделить интерфейс от реализации .
Иллюстрация проблемы. Предположим, вы используете MSVC 9.0 SP1, а я использую MSVC 8.0. В моем компиляторе реализация std :: string может выглядеть так:
class string
{
// : : stuff
private:
int someInt_;
char* someBuf_;
};
... но на вашем компиляторе это может выглядеть иначе:
class string
{
// : : stuff
private:
void* impl_;
};
Если я напишу библиотечную функцию:
void DoSomethingWithAString(std::string& str);
... и вы это называете, sizeof(string)
в вашем коде будет отличаться от sizeof(string)
в моем коде. Типы НЕ одинаковы.
У вас действительно есть только 2 решения вашей проблемы:
1) [предпочтительно] Получить разработчик StringUtils, чтобы исправить его испорченный код.
2) Замените библиотеку, используемую вашим компилятором, на библиотеку, используемую разработчиком StringUtil. Вы могли бы достичь этого, используя тот же компилятор на том же уровне исправлений, что и используемый разработчик, при условии, что он не заменил реализацию стандартной библиотеки.
РЕДАКТИРОВАТЬ: 3) Третий вариант будет прекратить использование StringUtils. Честно говоря, это, вероятно, то, что я бы сделал.