Forum » Programiranje » Zakaj try-catch v C++ sesuje program?
Zakaj try-catch v C++ sesuje program?
mojca ::
Prvič v življenju testiram try-catch v C++. Sledeči program:
na Mac-u brez težav prevedem in poženem z
Če taisto poizkusim pod polkni 7 (MinGW-jev prevajalnik), se mi program sesuje rekoč "This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information."
Zakaj???
V bistvu bi rada napisala C-jevski program, vendar je hendlanje napak tam prava mora, tako da mi je v redu, če preklopim na C++, vendar ...
Hvala za kakršenkoli hint.
#include <iostream> using namespace std; int main() { char *buf; try { buf = new char[210]; if( buf == 0 ) { throw "Memory allocation failure!"; } else { throw "No error to catch. :)"; } } catch( char * str ) { cout << "Exception raised: " << str << '\n'; } }
na Mac-u brez težav prevedem in poženem z
g++ ime.cpp -o ime
Če taisto poizkusim pod polkni 7 (MinGW-jev prevajalnik), se mi program sesuje rekoč "This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information."
Zakaj???
V bistvu bi rada napisala C-jevski program, vendar je hendlanje napak tam prava mora, tako da mi je v redu, če preklopim na C++, vendar ...
Hvala za kakršenkoli hint.
techfreak :) ::
Priporočam uporabo programa Visual Studio. Express verzija je zastonj in se lahko downloada iz naslednje strani: http://www.microsoft.com/express/downlo...
Z MinGWjem sem imel kar nekaj težav na Windows Vista/7 in sem raje prešel na Visual C++.
Z MinGWjem sem imel kar nekaj težav na Windows Vista/7 in sem raje prešel na Visual C++.
napsy ::
Namesto:
catch( char * str ) {
napiš:
catch(const char * str ) {
EDIT: ali pa bolj c++ varianto:
catch( char * str ) {
napiš:
catch(const char * str ) {
EDIT: ali pa bolj c++ varianto:
#include <iostream> #include <string> using namespace std; int main() { char *buf; try { buf = new char[210]; if( buf == 0 ) { throw std::string("Memory allocation failure!"); } else { throw std::string("No error to catch. :)"); } } catch( std::string str ) { cout << "Exception raised: " << str << '\n'; } return 0; }
"If you die, you die. But when you live you live. There is no time to waste."
Zgodovina sprememb…
- spremenil: napsy ()
rasta ::
catch( std::string str ) {
Ne tako delat. Tu po nepotrebnem kličeš kopirni konstruktor. Uporabljajte reference! Takole:
catch( std::string& str ) {
Pa uporabi using namespace std; na začetku datoteke se tudi izogibajte (stvar za biti tečna, ko v večjih projektih definiraš kakšne lastne funkcije á la max()).
Uporabi se ga po potrebi znotraj posamezne funkcije.
BigWhale ::
boogie_xlr je izjavil:
Dokler imašusing namespace std;ni potrebno pisat std::
Ne, ne, ne! Tega ne smes imeti!
Kdo hudirja vas take traparije uci?! ;)
boogie_xlr ::
Za začetnike in take male(hitre(za napisat)) programčke je jusing nejmspejc čist vredi.
rasta ::
Ne ni. Začetniki morajo pisati programe strogo po šolsko, drugače se že v začetku navzamejo kup slabih navad, ki vodijo k prebedenim nočem ob iskanju trivialnih hroščev v njihovi špageti kodi v njihovi nadaljni karieri.
BigWhale ::
Ce je mejhen in hiter program potem je lazje trikrat napisat std:: kot using namespace std; :>
boogie_xlr ::
OK, ampak zakaj potem using namespace? A ni boljše da ga kar odstranimo iz c++ standarda?
rasta ::
Zato ker pride prav. Npr. imaš funkcijo, kjer formatirano izpišeš veliko podatkov (in to z uporabo io manipulatorjev, se pravi std::setw ipd.).
V splošnem pa nočeš preveč mešat imenske prostore. V ta namen so tudi uvedli konstrukt namespace v C++ jezik.
V splošnem pa nočeš preveč mešat imenske prostore. V ta namen so tudi uvedli konstrukt namespace v C++ jezik.
mn ::
boogie_xlr je izjavil:
OK, ampak zakaj potem using namespace? A ni boljše da ga kar odstranimo iz c++ standarda?
Poleg tega je tudi stvar scope-a. Jaz osebno včasih uporabljam using namespace znotraj funkcije kjer se le-ta ogromno uporablja. Ampak ne vem, če bi to kdaj naredil z namespace-om std kjer je res ogromno nekih simbolov deklariranih in je prevelika verjetnost da sta enaka simbola deklarirana v dveh različnih namespace-ih.
Ponavadi pa raje namespace samo preimenujem. Recimo:
namespace lnn = SomeLong::NamespaceName;
boogie_xlr ::
Well, jaz še nikoli nisem imel problemov z using namespace std, drugač pa hvala za tole, zveš marsikaj na novo.
BigWhale ::
boogie_xlr je izjavil:
Well, jaz še nikoli nisem imel problemov z using namespace std, drugač pa hvala za tole, zveš marsikaj na novo.
Potem se nisi delal na kaksni vecji stvari. :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java]: replace - slovar v txtOddelek: Programiranje | 1692 (1550) | Spura |
» | [NALOGA][Java] Branje vsebine datoteke vzvratnoOddelek: Programiranje | 1611 (1553) | SkIDiver |
» | [C++] Portabilna funkcija za kopiranje datotekOddelek: Programiranje | 2253 (1909) | Gundolf |
» | Pointer-ji v C-juOddelek: Programiranje | 1776 (1474) | rokpok |
» | Coding StyleOddelek: Programiranje | 3462 (2654) | 64202 |