5

次の宣言を持ついくつかのレガシー C++ コード (GNU g++ 2.95.3 を使用してコンパイルするために使用) があります std::basic_string<char,string_char_traits<char>,malloc_alloc> x; 。ヘッダー ファイルは

#include <std/bastring.h>

今、私はこのエラーが発生している GU g++ 4.9 に移行しています: 1.std/bastring.h見つかりません 2. #include <std/bastring.h>asを変更する#include <string>と、次のエラーが発生します:

error: 'string_char_traits' was not declared in this scope
std::basic_string<char,string_char_traits<char>,malloc_alloc> x;
error: template argument 2 is invalid
std::basic_string<char,string_char_traits<char>,malloc_alloc> x;
error: expected unqualified-id before ',' token
std::basic_string<char,string_char_traits<char>,malloc_alloc> x;
                                              ^

これを GNU g++ 4.9 でコンパイル可能にするためのガイダンス/ヘルプが必要です

4

1 に答える 1

1

ISO/IEC 14882:1998 の発行にもかかわらず、GCC 2.95.3 は C++98 準拠のコンパイラではありません。私たちは、15 年前の 15 年前のコンパイラが、1990 年代の非標準コードという恐るべき恐ろしいコードで実行されていることについて話しているのです。1 つには、ここに からのスニペットがありbastring.hます。

// Written by Jason Merrill based upon the specification by Takanori Adachi
// in ANSI X3J16/94-0013R2.

...

// NOTE : This does NOT conform to the draft standard and is likely to change
#include <alloc.h>

よくわかりませんANSI X3J16/94-0013R2が、ISO C++98 とは何の関係もありません。何らかの理由で明示的にアロケーターで使用したい場合malloc_allocは 、 にあります。alloc.hmallocfree

とにかく、コードベースは間違いなくゼロから書き直さなければなりません。std::basic_string<char,string_char_traits<char>,malloc_alloc> x;で置き換えることができますstd::string。しかし、そこにある他の標準化前のコードの恐ろしさに身震いします。

于 2016-06-08T11:26:20.390 に答える