obiekt was not declared in this scope

0

Mam pewien problem wcześniej miałem coś takiego i działało:

czlowiek * obiekt = new czlowiek[n]; cout << obiekt[1].imie;

Zmieniłem to na:

 
if(...) {
...
czlowiek * obiekt = new czlowiek[n];
...
else {
...
czlowiek * obiekt = new czlowiek[n];
...
}
cout << obiekt[1].imie;

i teraz wywala błąd

'obiekt' was not declared in this scope

Czy używał jakichś niedozwolonych metod czy jak? Mógłby ktoś pomóc?

0

No bo dzieje się dokładnie to, co jest napisane. W tym zakresie nie ma żadnej zmiennej obiekt. Jeżeli chcesz to mieć tak jak napisałeś to przenieś definicję obiekt poza if i zrób tak: czlowiek *obiekt = NULL (albo lepiej nullptr, jeżeli Twój kompilator obsługuje C++11). Wewnątrz będzie ten new ale już jako zwykłe przypisanie.

W zasadzie to, co pokazałeś nie ma sensu, bo nie zależnie czy to if czy else definiowane jest to samo. Dlaczego to jest w tym if a nie całkiem poza?

0

w miejscu napotkania } twój człowiek przestaje być osiągalny i masz wyciek pamięci.

czlowiek *obiekt;
if (...)
{
  ...
} else {
  ...
}
0

Dzięki, dorzuciłem czlowiek *obiekt; przed ifa i już działa. Sens raczej jest, bo zmienna n zależy od kilku czynników wewnątrz ifa i elsa

0

To oblicz n i po wyjściu z bloku if zdefiniuj tę zmienną. Będzie lepiej wyglądać.

0

To rozwiązanie z czlowiek *obiekt; jednak nie działa, bo tworzy straszne śmieci w obiekcie

0

W pierwszym ifie liczę n na jeden sposób, a w elsie na zupełnie inny i nie da się tego rozdzielić

0

Nie rozumiem tego języka. Jak zrobię raz deklaracje i jej użyję to jest ok, ale program nie spełnia wszystkich funkcji które chcę i potrzebuję to zrobić przez if i else. Kiedy tak robię to się nie kompiluje. Kiedy dodam to czlowiek *obiekt; to nagle w obiekcie się pojawiają liczby typu 213123.213123213e231, a kiedy dodam jeszcze delety przed deklaracjami obiektu w ifie i elsie to program się kompiluje, uruchamia i zawiesza.

0

Nie wie nikt jak się pozbyć tych śmieci? Daję

delete * czlowiek

przed czlowiek * obiekt = new czlowiek[n];

, ale program się zawiesza
0

daje delete obiekt, że przepisalem

0

Nie rozumiem tego języka.
Każda zmienna jest dostępna (albo: istnieje) wewnątrz najbardziej zagnieżdzonych klamer.

// w tym miejscu nie ma żadnej zmiennej i

{
   int i;
   // w tym miejscu, do końca klamry, zmienna i jest dostępna

} // tutaj kończy się zasięg zmiennej i

// w tym miejscu nie ma żadnej zmiennej i

więc jak umieściłeś zmienną wewnątrz klamer, to tylko tam jest dostępna.

0

dzięki

0
przeroslomnie napisał(a):

Nie wie nikt jak się pozbyć tych śmieci? Daję

delete * czlowiek

przed czlowiek * obiekt = new czlowiek[n];

, ale program się zawiesza

Bo najprawdopodobniej próbujesz zwolnić niezaalokowaną pamięć.
0

Czy jest na sali jakiś mod?
@przeroslomnie jak po przeróbkach nadal nie działa, to daj kod. Na prawdę lepiej się go analizuje, niż epopeje wielopostowe

1 użytkowników online, w tym zalogowanych: 0, gości: 1