2016-06-08 12 views
5

ho qualche codice legacy C++ (utilizzato per la compilazione utilizzando GNU g ++ 2.95.3) avente la seguente dichiarazione std::basic_string<char,string_char_traits<char>,malloc_alloc> x; Il file di intestazione erastring_char_traits <char> in C++ 11 per GNU/G ++ 4.9 (in precedenza 2.95.3)

#include <std/bastring.h> 

Ora, io sono la migrazione a GU g ++ 4.9 in cui sto ottenendo questo errore: 1. std/bastring.h non trovato 2. Quando cambio #include <std/bastring.h> come #include <string>, sto ottenendo il seguente errore:

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; 
              ^

bisogno di una guida/contribuiscono a rendere questo compilabile sotto GNU g ++ 4.9

+0

Sai perché 'malloc_alloc' è stato utilizzato in primo luogo piuttosto che solo' alloc'? Potresti riuscire a farla franca usando semplicemente 'std :: string'. – TartanLlama

+0

@ DieterLücking errore fatale: std/bastring: nessun file o directory –

+0

@TartanLlama Non sono sicuro del motivo per cui è stato usato malloc_alloc invece di allocare, sei std :: string farebbe lo stesso std :: basic_string? –

risposta

1

Nonostante la pubblicazione della ISO/IEC 14882: 1998, GCC 2.95.3 è molto non è un C++ 98 conforme compilatore. Stiamo parlando di un compilatore di 15 anni in esecuzione sulle code di Dio terribile che sa-quale-codice non standard degli anni '90. Per prima cosa, ecco un frammento da 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> 

non so cosa ANSI X3J16/94-0013R2 ma sicuramente ha nulla a che fare con la norma ISO C++ 98. malloc_alloc si trova in alloc.h, se per qualche motivo si desidera esplicitamente che malloc e free vengano utilizzati nell'Allocatore.

Ad ogni modo, la base di codice è senza dubbio destinata a essere riscritta da zero. std::basic_string<char,string_char_traits<char>,malloc_alloc> x; può essere sostituito con std::string. Ma rabbrividisco agli orrori di ciò che altro codice pre-standard giace lì dentro.

+0

ANSI X3J16/94-0013R2 è un documento del comitato C++ tratto da, beh, 1994. (ANSI X3J16 è il comitato C++ degli Stati Uniti.) Sfortunatamente, non sembra essere disponibile online. –