Oznacza że zamierzasz używać całej przestrzeni nazw std.
using namespace std::ios_base;
Oznacza że zamierzasz używać klasy ios_base z przestrzeni nazw std.
using namespace std;
using std::ios_base;
Drugie polecenie jest bez sensu, ponieważ pierwsze już dołączyło całą przestrzeń nazw std w tym klasę ios_base.
using namespace std;
Powoduję że możesz użyć cout zamiast std::cout , ponieważ przestrzeń nazw std jest dołączona do kodu (dostępna bezpośrednio); Nie ma żadnej możliwości dołączenia klasy tak jak przestrzeni nazw, czyli nigdy nie będziesz mógł użyć app zamiast ios::app lub ios_base::app tak by kompilator zrozumiał że masz na myśli właśnie ios_base::app , no chyba że w metodach klasy pochodnej od ios_base. Aby Fiołek nie zaczął uściśleń :
[*:327qpxrs]Jeżeli piszesz klasę dziedziczącą po ios_base (nie koniecznie bezpośrednio) to w metodach takiej klasy można użyć samo app zamiast ios_base::app ; [*:327qpxrs]Zawsze możesz zdefiniować:
Nie użyłem nigdzie w kodzie ‘using namespace std;’
Po przeczytaniu Waszych postów wkleiłem samą funkcję i skompilowałem i okazało się, że nie ma błędów. Po prostu nie wiem dlaczego jak wcześniej wstawiałem linię ‘using std::ios_base;’ to nie chciało się skompilować i dostawałem komunikat, że app nie zostało zadeklarowane.
#include
#include
#include
using std::string;
using std::ofstream;
using std::cerr;
using std::endl;
using std::ios_base;
bool zapisz(string nazwa, string tekst)
{
char *nplik = new char[nazwa.length()+1];
strcpy ( nplik , nazwa.c_str());
ofstream plik(nplik, ios_base::app);
if (!plik)
{
cerr << "Blad pliku '" << nplik << "'" << endl;
return false;
}
plik << tekst << endl;
plik.close();
return true;
}
int main()
{
return 0;
}
Czy nie zrobi to żadnej różnicy, jak użyję tylko ‘using namespace std;’ a resztę wytnę ?
Gdzieś kiedyś wyczytałem, że może to powodować pewne problemy, oczywiście już nie pamiętam jakie, ale przyzwyczaiłem się do formy ‘using std:: …’
Chyba masz rację, bardzo możliwe, że tak na początku napisałem i to było powodem problemów.