• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Object was not declared in this scope C++

Object Storage Arubacloud
–1 głos
629 wizyt
pytanie zadane 23 sierpnia 2020 w C i C++ przez Drożdżówka Obywatel (1,870 p.)
edycja 23 sierpnia 2020 przez Drożdżówka

Witam!

Pokazuje mi się taki błąd jak w tytule po wpisaniu takiego kodu

main.cpp
#include <iostream>
#include "Test2.h"

using namespace std;

int main()
{
    Obiekt Test;
    Test.Name = "Test";
    Test1();
    return 0;
}
Test2.h
#ifndef TEST2_H_INCLUDED
#define TEST2_H_INCLUDED

#include <iostream>

using namespace std;

class Obiekt
{
    string Name;
};

void Test1();

#endif // TEST2_H_INCLUDED
Test3.cpp
#include "Test2.h"

void Test1()
{
    cout << Test.Name;
}
komentarz 23 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
Wkleiłeś dobry kod? Bo brakuje czegoś w main, dokładnie includa z klasą "Obiekt".
komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)
Includuje klase w .h
komentarz 23 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
Odwołujesz się do zmiennej "Name" gdzie ona jest prywatna.
Pokaż konkretną nazwę błędu razem z linią w której występuje.

1 odpowiedź

+1 głos
odpowiedź 23 sierpnia 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)
wybrane 23 sierpnia 2020 przez Drożdżówka
 
Najlepsza

Dwa problemy:

1. W mainie nie wiadomo co to za typ ten Obiekt, bo zapomniałeś o #include "Test2.h".

2. W Test3.cpp nie widać obiektu Test, bo on jest widoczny tylko w mainie. Tu potrzebujesz np. zmiennej globalnej. W Test2.h piszesz extern Obiekt Test;. To znaczy "gdzieś jest zdefiniowany taki obiekt". To wystarczy żebyś mógł już go zacząć używać w Test3.cpp. No i jeszcze gdzieś go zdefiniuj, w przestrzeni globalnej. Może być np. nad mainem. Może być w Test3.cpp, nieważne. Dodaj tam linijkę Obiekt Test;.

komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)
Ale jak to dokładniej zrobić?
komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)
Nie jednak nie rozumiem XD
komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)

@Piotr Batko, "No i jeszcze gdzieś go zdefiniuj, w przestrzeni globalnej. Może być np. nad mainem. Może być w Test3.cpp, nieważne. Dodaj tam linijkę Obiekt Test;."

Jak to zrobić dokładniej?

komentarz 23 sierpnia 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)
main.cpp
#include <iostream>
#include "Test2.h"
 
using namespace std;

// Tu przeniosłem definicję
Obiekt Test;

int main()
{
    // Stąd skasowałem
    // Skasowane: Obiekt Test;
    Test.Name = "Test";
    Test1();
    return 0;
}

 

komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)
Nadal nie działa
komentarz 23 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
Bo "Name" jest prywatny...
komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)
Nie jest, zmieniłem to
komentarz 23 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
Pokaż nowy kod razem z pełnymi błędami.
komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)
main.cpp
#include "Test2.h"
Obiekt Test;


int main()
{
    Test.Name = "Test";
    Test1();
    return 0;
}
Test.h
#ifndef TEST2_H_INCLUDED
#define TEST2_H_INCLUDED

#include <iostream>

using namespace std;

class Obiekt
{
public:
    string Name;
};

void Test1();

#endif // TEST2_H_INCLUDED
Test3.cpp
#include "Test2.h"

void Test1()
{
    cout << Test.Name;
}
BŁĘDY
C:\Users\NiePokażę\Desktop\test\Test3.cpp|5|error: 'Test' was not declared in this scope|

 

komentarz 23 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
#include "Test.hpp"
Obiekt Test;

int main()
{
    Test.Name = "Test";
    Test1();
    return 0;
}
#include "Test.hpp"
void Test1()
{
    extern Obiekt Test;
    cout << Test.Name;
}
#ifndef TEST_HPP_INCLUDED
#define TEST_HPP_INCLUDED

#include <iostream>
using namespace std;
class Obiekt
{
public:
    string Name;
};
void Test1();

#endif //TEST2_H_INCLUDED

 

komentarz 23 sierpnia 2020 przez Drożdżówka Obywatel (1,870 p.)
Dzięki!

Podobne pytania

0 głosów
1 odpowiedź 666 wizyt
pytanie zadane 23 października 2019 w C i C++ przez darekdede1995 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 422 wizyt
0 głosów
0 odpowiedzi 759 wizyt
pytanie zadane 8 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...