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

question-closed Atom, c++ undefined reference

Object Storage Arubacloud
0 głosów
830 wizyt
pytanie zadane 21 marca 2019 w C i C++ przez Teslum_369 Gaduła (4,190 p.)
zamknięte 22 marca 2019 przez criss

Witam,

Po obejrzeniu odcinka drugiego kursu Pana Mirka z programowania obiektowego C++ wkleiłem pliki z odcinka do kompilatora i wyświetla mi błąd:

In function `main':
objectiv.cpp:(.text+0xbb): undefined reference to `Pytanie::wczytaj()'
objectiv.cpp:(.text+0xe4): undefined reference to `Pytanie::zadaj()'
objectiv.cpp:(.text+0x10d): undefined reference to `Pytanie::sprawdz()'
collect2: error: ld returned 1 exit status

Moje pliki:

  • objectiv.cpp: 

#include <iostream>
#include "pytanie.h"
 
using namespace std;
 
int main()
{
 
   Pytanie p[5];
   int suma=0;
   for(int i=0; i<=4; i++)
   {
      p[i].nr_pytania=i+1;
      p[i].wczytaj();
      p[i].zadaj();
      p[i].sprawdz();
      suma+=p[i].punkt;
   }
 
   cout<<"KONIEC QUIZU! PUNKTY = "<<suma;
 
   return 0;
}

  • pytanie.h:

#include <iostream>
 
using namespace std;
 
class Pytanie
{
   public:
 
   string tresc;
   string a,b,c,d;
   int nr_pytania;
   string poprawna;
   string odpowiedz;
   int punkt;
 
   void wczytaj(); //wczytuje pytania z pliku
   void zadaj(); //pokazuje pytanie, czyta odpowiedz
   void sprawdz(); //sprawdza poprawnosc odpowiedzi
};

  • pytanie.cpp:

#include <iostream>
#include "pytanie.h"
#include <fstream>
#include <cstdlib>
 
using namespace std;
 
void Pytanie::wczytaj()
{
   fstream plik;
   plik.open("quiz.txt",ios::in);
 
   if(plik.good()==false)
   {
      cout<<"Nie udalo sie otworzyc pliku!";
      exit(0);
   }
 
   int nr_linii=(nr_pytania-1)*6+1;
   int aktualny_nr=1;
   string linia;
 
   while(getline(plik,linia))
   {
      if(aktualny_nr==nr_linii) tresc=linia;
      if(aktualny_nr==nr_linii+1) a=linia;
      if(aktualny_nr==nr_linii+2) b=linia;
      if(aktualny_nr==nr_linii+3) c=linia;
      if(aktualny_nr==nr_linii+4) d=linia;
      if(aktualny_nr==nr_linii+5) poprawna=linia;
      aktualny_nr++;
   }
 
   plik.close();
 
}
 
void Pytanie::zadaj()
{
   cout<<endl<<tresc<<endl;
   cout<<a<<endl;
   cout<<b<<endl;
   cout<<c<<endl;
   cout<<d<<endl;
   cout<<"------------------------"<<endl;
   cout<<endl<<"Odpowiedz: ";
   cin>>odpowiedz;
}
 
void Pytanie::sprawdz()
{
   if(odpowiedz==poprawna)
   {
      punkt=1;
   }
   else punkt=0;
}

  • quiz.txt
    Typ zmiennych o nazwie float przechowuje:
    liczby calkowite
    napisy
    liczby zmiennoprzecinkowe
    pojedyncze znaki
    c
    Wstrzymanie wykonania programu na czas 2 sekund uzyskasz instrukcja:
    Wait(2000)
    Stop(2000)
    Delay(2000)
    Sleep(2000)
    d
    Ktora deklaracja jest zapisana poprawnie?
    int x;
    integer x;
    x:integer;
    x=integer;
    a
    Z jakiego przedzialu zostanie wylosowana liczba: rand()%10+2
    0..9
    2..9
    2..11
    0..11
    c
    Ile razy wykona sie petla: for (int i=4; i>=-2; i--)
    ani razu
    nieskonczenie wiele razy
    6
    7
    d

     

To tyle,

Czy mógłby mi ktoś pomóc jak wystartować program?

Z góry dziękuję za pomoc! 

komentarz zamknięcia: Rozwiązanie w odpowiedzi
3
komentarz 21 marca 2019 przez Secrus Nałogowiec (32,880 p.)

Pomóc nie pomogę, ale angielskiego się czepię ;)
Objecitve, nie Objectiv
PS Objective-C++ wariantem języka obj-C, więc uwaga z nazewnictwem ;)

2
komentarz 21 marca 2019 przez Teslum_369 Gaduła (4,190 p.)
Niektórzy traktują "takie czepianie" jako coś złego, dla mnie to dobra lekcja, dzięki ;)
1
komentarz 21 marca 2019 przez Secrus Nałogowiec (32,880 p.)
Jak dla mnie, jeśli krytyka jest konstruktywna i niesie ze sobą wskazówki poprawy, to jest dobra. Cieszę się, że mogłem pomóc ;)

3 odpowiedzi

+1 głos
odpowiedź 21 marca 2019 przez Teslum_369 Gaduła (4,190 p.)
[SOLVED]

Jeżeli również ktoś korzysta z Atom i zmaga się z tym problemem to należy zrobić to tak:

ctr + pojedyncze kliknięcie na zakładkę (nie można przeciągać!). Takim sposobem trzeba zaznaczyć wszystkie pliki z rozszerzeniem .cpp (oraz jak wiadomo zincludować pliki z rozszerzeniem .h (tak jak zwykle ma to miejsce)).
0 głosów
odpowiedź 21 marca 2019 przez criss Mędrzec (172,590 p.)
pytanie.cpp jest kompilowany? Obstawiam, że nie.
komentarz 21 marca 2019 przez Teslum_369 Gaduła (4,190 p.)
Co masz na mysli?  Jeżeli chodzi Ci o compile and run to daję to przy pliku objectiv.cpp, ale przy pytanie.cpp też nie działa.
komentarz 21 marca 2019 przez criss Mędrzec (172,590 p.)
Nie wiem jakie compile and run.. Sprawdź w build logu czy kompilator kompiluje ten plik, bo dostajesz błędy linkera z których wynika, że nie
0 głosów
odpowiedź 21 marca 2019 przez Kontrane Początkujący (260 p.)
Wszystkie pliki nagłówkowe się zgadzają ;)

Jakiego środowiska używasz?

Kiedyś też to pisałem. Z tego co widzę, to mój kod w Code::Blocksie działa jak należy, a stosując surowy kompilator też pokazuje mi podobne błędy. Może Code::Blocks sam dba o odpowiednie połączenie plików, a w Twoim przypadku trzeba to zrobić jakoś ręcznie
2
komentarz 21 marca 2019 przez Secrus Nałogowiec (32,880 p.)
Jeśli używa się IDE, to środowisko dba o odpowiednią kolejność kompilacji plików, korzystając z kompilatora, lepiej nauczyć się pisać Makefile (bądź inny podobny program), który będzie odpowiednio wykonywał kolejne etapy kompilacji wielu plików
komentarz 21 marca 2019 przez Teslum_369 Gaduła (4,190 p.)
Korzystam z edytora Atom
komentarz 21 marca 2019 przez Kontrane Początkujący (260 p.)
Atom to jedynie edytor tekstowy z dołączonym kompilatorem.

Tak jak mówił kolega powyżej, musisz trochę poszperać po internetach!
komentarz 22 marca 2019 przez Hiskiel Pasjonat (22,830 p.)
Edytor tekstowy z kompilatorem to IDE..
Atom to tylko i wyłącznie edytor tekstowy.
komentarz 23 marca 2019 przez Kontrane Początkujący (260 p.)
Można się tutaj spierać, miałem na myśli to, że można podłączyć pod ten edytor kompilator, a nie, że taki kompilator jest wbudowany i zintegrowany.

Podobne pytania

0 głosów
0 odpowiedzi 267 wizyt
0 głosów
1 odpowiedź 319 wizyt
pytanie zadane 30 listopada 2020 w Systemy operacyjne, programy przez qwert 100 Obywatel (1,250 p.)
0 głosów
1 odpowiedź 100 wizyt

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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!

...