-> Object reference not set to an instance of an object.
List< int > bla ;
bla = new List< int > () ;
bla.Add(1) ;
-> toto druhé zbehne v poriadku.
aj keď ten prvý príklad asi vyhlási skôr "Null reference exception", ale to je v zásade to isté ako ten error čo dostávaš ty.
Ak ide o kus kódu, ktorý nemusí bezpodmienečne zbehnúť vždy, tak ho uzavri do
if(bla != null)
ak ide o kus kódu, ktorý musí zbehnúť bezpodmienečne vždy, tak si skontroluj či na správnom mieste inicializuješ daný objekt, alebo pred miesto kde ti vyhadzuje ten error hoď
if(bla == null) bla = new List< int > () ;
pochopiteľne názvy premenných a typy objektov prispôsob tomu s čím robíš.
"Ale v zdrojáku, keď sa do akejkoľvek premennej snažím uložiť úplne hocičo. Vždy mi VS vyhodí tento error."
hm... tak teraz si nie som istý či som správne tipol čo robíš zle... ako hovoria ostatní, s takýmito otázkami rovno do nejakého pastebinu skopni zdroják čo blbne, a linkni ho.
Každopádne, ak mám pravdu (stále možné), tak robíš fatálnu chybu v tom, že nerozlišuješ deklaráciu, a inicializáciu premennej.
Deklarácia je vyhlásenie, že "takáto premenná ide existovať a takto sa bude volať", to je to
List< int > bla ;
kde prvé pred medzerou je typ premennej, a za medzerou jej názov.
Inicializácia je prvé stanovenie hodnoty, čiže v tom horeuvedenom príklade ten druhý riadok:
bla = new List< int > () ;
kde hovoríš "vytváram nový zoznam, a vravím ti, že teraz bude vo zvyšku kódu vystupovať pod menom bla". Ale skrátka kým nespravíš toto druhé, tak daná premenná je len názov bez významu.
(Predpokladám jazyk C#, a predpokladám že si úplný začiatočník, pretože v tom tvojom úvodnom komente nie je nič čo by naznačovalo niečo iné, a C# mám najradšej)
aha, tak ono to je tá istá exception, čiže mám asi pravdu.
keď niekam píšeš otázku (alebo aj keď sa snažíš sám zorientovať, tak po čase zistíš, že) *názov* exception je omnoho stručnejší, a obsahuje všetko čo potrebuješ (NullReferenceException - premenná ktorú používaš odkazuje na null (čiže nemala nikdy počas behu programu priradenú hodnotu, alebo niekedy počas jeho behu si jej explicitne priradil null), tie rozkecané popisky sa hodia hlavne vtedy keď nemáš ani páru o čo ide (a niekedy ani vtedy nepomôžu). Každopádne keď potom googliš, googli (najprv) názov exceptionu, nie popisok. A keď sa pýtaš v diskusii (kdekoľvek), v prvom rade zasa daj názov exceptionu, nie popisok
@n0win0u snaha o priradenie neexistujúceho/nepublic atribútu, alebo volanie neexistujúcej/nepublic metódy na objekte je compile-time error ("does not contain declaration of ..."), nie runtime exception
@n0win0u ani ja, ale mám tu VS otvorené vkuse už asi týždeň, tak som si vyskúšal . každopádne tušáka som mal, že pokiaľ viem tak v každom kompilovanom jazyku bude pokus o prístup k neexistujúcej property/metóde compile-time error, lebo to zlyhá už pri konverzii názvu property/funkcie na adresu pamäte/strojového/intermediate kódu, naproti tomu akýkoľvek error obsahujúci "null" bude runtime, lebo až pri behu programu môže nastať situácia že "premenná má hodnotu", či už reálnu, alebo null
Roleta je špeciálny inkognito mód, ktorým skryješ obsah obrazovky pred samým sebou, alebo inou osobou v tvojej izbe (napr. mama). Roletu odroluješ tak, že na ňu klikneš.
19 komentov
ak chceš používať nejakú triedu, musíš ju najprv vytvoriť ako objekt a až potom volať jej metódy.
aspoň myslím, že tu by mohol byť pes zakopaný. čo je to? c, c++ alebo java?
List< int > bla ;
bla.Add(1) ;
-> Object reference not set to an instance of an object.
List< int > bla ;
bla = new List< int > () ;
bla.Add(1) ;
-> toto druhé zbehne v poriadku.
aj keď ten prvý príklad asi vyhlási skôr "Null reference exception", ale to je v zásade to isté ako ten error čo dostávaš ty.
Ak ide o kus kódu, ktorý nemusí bezpodmienečne zbehnúť vždy, tak ho uzavri do
if(bla != null)
ak ide o kus kódu, ktorý musí zbehnúť bezpodmienečne vždy, tak si skontroluj či na správnom mieste inicializuješ daný objekt, alebo pred miesto kde ti vyhadzuje ten error hoď
if(bla == null) bla = new List< int > () ;
pochopiteľne názvy premenných a typy objektov prispôsob tomu s čím robíš.
"Ale v zdrojáku, keď sa do akejkoľvek premennej snažím uložiť úplne hocičo. Vždy mi VS vyhodí tento error."
hm... tak teraz si nie som istý či som správne tipol čo robíš zle... ako hovoria ostatní, s takýmito otázkami rovno do nejakého pastebinu skopni zdroják čo blbne, a linkni ho.
Každopádne, ak mám pravdu (stále možné), tak robíš fatálnu chybu v tom, že nerozlišuješ deklaráciu, a inicializáciu premennej.
Deklarácia je vyhlásenie, že "takáto premenná ide existovať a takto sa bude volať", to je to
List< int > bla ;
kde prvé pred medzerou je typ premennej, a za medzerou jej názov.
Inicializácia je prvé stanovenie hodnoty, čiže v tom horeuvedenom príklade ten druhý riadok:
bla = new List< int > () ;
kde hovoríš "vytváram nový zoznam, a vravím ti, že teraz bude vo zvyšku kódu vystupovať pod menom bla". Ale skrátka kým nespravíš toto druhé, tak daná premenná je len názov bez významu.
(Predpokladám jazyk C#, a predpokladám že si úplný začiatočník, pretože v tom tvojom úvodnom komente nie je nič čo by naznačovalo niečo iné, a C# mám najradšej)
aha, tak ono to je tá istá exception, čiže mám asi pravdu.
keď niekam píšeš otázku (alebo aj keď sa snažíš sám zorientovať, tak po čase zistíš, že) *názov* exception je omnoho stručnejší, a obsahuje všetko čo potrebuješ (NullReferenceException - premenná ktorú používaš odkazuje na null (čiže nemala nikdy počas behu programu priradenú hodnotu, alebo niekedy počas jeho behu si jej explicitne priradil null), tie rozkecané popisky sa hodia hlavne vtedy keď nemáš ani páru o čo ide (a niekedy ani vtedy nepomôžu). Každopádne keď potom googliš, googli (najprv) názov exceptionu, nie popisok. A keď sa pýtaš v diskusii (kdekoľvek), v prvom rade zasa daj názov exceptionu, nie popisok
"pripadne davaj pozor, aby si nevolal nieco, pripadne nechcel menit nieco, co je private a teda bez instancie ti to nepojde"
vysvetli sa, lebo táto veta mi nedáva zmysel