/ / program sa neskladá s novšou verziou g ++ - c ++

program nezostavuje s novšou verziou g ++ - c ++

Mám nasledujúci zdrojový kód. Ktorý kompiluje pokuty vo vizuálnych štúdiách a g ++ 3.4.6; ale nie s g ++ 4.4.3 (na novšom ubuntu stroji). Novší kompilátor vyžaduje, aby som explicitne zaradil atoi. Snažím sa prísť na to, čo by sa mohlo zmeniť, aby to spôsobilo toto správanie. Je to sstream hlavičkový súbor predtým zahrnuté cstdlib a už tak neurobí. Alebo sa zmenilo správanie kompilátora.

#include <sstream>

int main()
{
char str1[]="123";
int i = atoi(str1);

printf ("value = %d",i);
return 0;
}

odpovede:

10 pre odpoveď č. 1

Musíte tiež zahrnúť <cstdio> pre printf().

Technicky, ak zahrniete hlavičky formulára <cname> namiesto <name.h>, musíte tiež kvalifikovať mená zo štandardnej knižnice pomocou std::, Veľa štandardných knižničných implementácií je však uvoľnených, pokiaľ ide o toto riešenie, a tiež uvádza mená do globálneho menného priestoru.

Závisí od implementácie, ktoré hlavičky súzahrnuté, podľa ktorého ostatné hlavičky, takže by ste mali vždy uistiť, že sú zahrnuté všetky hlavičky, ktoré potrebujete, a nepredpokladajte, že budú automaticky zahrnuté.


6 pre odpoveď č. 2

"Používam GCC 4.4.5 na Debiane a hlavičky sa zmenili, takže nebudete potrebovať hlavičky potrebné." #include <cstdlib> a #include <cstdio> získať atoi a printf, pretože kompilátor si sťažoval, že obe chýbajú.

#include <sstream>
#include <cstdio>
#include <cstdlib>


int main()
{
char str1[]="123";
int i = std::atoi(str1);

std::printf ("value = %d",i);
return 0;
}

2 pre odpoveď č. 3

No áno. To je bežné. Vždy by ste mali zahrnúť VŠETKY hlavičky, ktoré priamo používate, a nezávisieť od skutočnosti, že tieto hlavičky sú už zahrnuté.


1 pre odpoveď č. 4

Správanie kompilátora je to, čo by sa zmenilo <sstream> nepoužíva atoi.

Pravdepodobne ste vždy mali robiť #include <cstdlib>a vy ste mali šťastie so svojimi predchádzajúcimi kompilátormi.

Ako poukazuje James McNeillis, mali by ste tiež #include <cstdio> pre použitie printf Funkcie.