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

Problem "Undefinded reference to"

VPS Starter Arubacloud
0 głosów
477 wizyt
pytanie zadane 29 czerwca 2016 w C i C++ przez sparklemo7ion Początkujący (360 p.)

main.cpp:

#include <iostream>
#include <cstdlib>
#include "kalk.h"
using namespace std;

int main()
{
    Dzialanie dz [100];
for (int i =0; ; i++)
{
    dz[i].wybor();
}

return 0;
}

 

kalk.h:

#include <iostream>
using namespace std;

class Dzialanie{
    public:
int a,b,wynik;

int dodawanie ();
int odejmowanie ();
int mnozenie ();
int dzielenie ();
int modul();
void wybor(); //wybiera opcje dzialania
};

kalk.cpp:

#include <iostream>
#include <cstdlib>
#include "kalk.h"
using namespace std;

int Dzialanie::dodawanie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;

    return a+b;
}

int Dzialanie::odejmowanie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a-b;
}

int Dzialanie::mnozenie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a*b;
}

int Dzialanie::dzielenie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a/b;
}

int Dzialanie::modul()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a%b;
}

void Dzialanie::wybor()
{
    int co;
    cout <<"CO CHCESZ ZROBIC?"<<endl;
    cout <<"***********************************************"<<endl;
    cout <<"1.Dodawanie"<<endl;
    cout <<"2.Odejmowanie"<<endl;
    cout <<"3.Mnozenie"<<endl;
    cout <<"4.Dzielenie"<<endl;
    cout <<"5.Modul"<<endl;
    cout <<"0.Wyjscie"<<endl;
    cout <<"***********************************************"<<endl;
    cin>>co;

    switch ( co )
    {
    case 1:
        dodawanie();
        break;

    case 2:
        odejmowanie();
        break;

    case 3:
        mnozenie();
        break;

    case 4:
        dzielenie();
        break;

    case 5:
        modul();
        break;

    case 0:
        exit(0);
    }
}

Dopiero zacząłem programować obiektowo i postanowiłem sobie zrobić jakiś mały kalkulator, ale natrafiam na błąd, który nie wiem skąd się bierze "undefined reference to `Dzialanie::wybor()' "

I jeszcze jedno.. jak użyć wektora, albo przynajmniej wskaźnika, żeby zrobić dynamiczną tablicę na obiekt? 

Pozdrawiam

2 odpowiedzi

0 głosów
odpowiedź 29 czerwca 2016 przez niezalogowany
Dodałeś pliki do projektu?
komentarz 29 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Myślalem, że wystarczy zaincludować plik nagłówkowy i mieć pliki w tym samym folderze :P

Chyba wiem o co Ci chodzi no i klikam Project -> Add files i nic się nie dzieje jak to klikne, żadne okno się nie pojawia.
komentarz 29 czerwca 2016 przez niezalogowany
Spróbuj zrestartować IDE i jeszcze raz dodać pliki do projektu.
komentarz 29 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Dalej nic.
komentarz 29 czerwca 2016 przez niezalogowany
Nie pomogę Ci bo z Code Blocks już od dawna nie miałem styczności a po zapytaniu wujka Google, nie znalazłem nikogo z takim problemem jak ty.
komentarz 30 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Ok, dzięki za próbe:)
0 głosów
odpowiedź 29 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
Jakiego kompilatora i IDE używasz. Jeżeli kompilator to GCC (z lini poleceń) to upewnij się że podałeś wszystkie pliki z rozszerzeniem .cpp:

g++ main.cpp kalk.cpp -Wall -Wextra -std=c++14
komentarz 29 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)

Code Blocks 13.12 

Właśnie wchodząć w Project -> Add files nie mogę ich dodać:/ 

a to co napisałeś: g++ main.cpp kalk.cpp -Wall -Wextra -std=c++14 to mam gdzieś wpisac czy jak?

komentarz 29 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
To wpisujesz w terminalu (musisz mieć kompilator gcc, standardowo jest w codeblocks). To ci wystarczy. Instrukcja:

1. Otwierasz terminal

2. Wchodzisz do katalogu z projektem:  cd katalog z projektem

3. Wpisujesz polecenie: g++ main.cpp kalk.cpp -Wall -Wextra -std=c++14 -pedantic

4. Uruchamiasz program w danym katalogu (jego nazwa to a z rozszerzeniem pliku wykonywalnego w twoim systemie operacyjnym.
komentarz 30 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Po wpisaniu komendy wyskakuje błąd "g++ is not recognized as an internal or external command, operable program or batch file".
komentarz 30 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
1. W przypadku twojego systemu (Windows) dodajesz do zmiennej PATH pełna_ścieżka_do_katalogu_instalacji_codeblocks\MinGW\bin.

2. Wpisujesz polecenie napisane w komentarzu wyżej.

3. Jeżeli nie wiesz jak dodać coś do zmiennej path wpisujesz w cmd takie coś:

set path=%path%;pełna_ścieżka_do_katalogu_instalacji_codeblocks\MinGW\bin.

4. Pamiętaj by zamienić "pełna_ścieżka_do_katalogu_instalacji_codeblocks" na właściwy folder CodeBlocks.

5. Jeżeli nic nie ma w tym katalogu znaczy, że nie posiadasz kompilatora.
komentarz 30 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
http://www.fotosik.pl/zdjecie/bc03613f888135fe g++ error się pojawia.

Tzn chodzi o ten na dole bo na górze wyskoczyły errory bo nie zmieniłem katalogu na ten z projektem :P
komentarz 30 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
Usuń -std=c++14 lub zamień na -std=c++11.
komentarz 30 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
A, no i kompilator mam, bo przecież inne projekty strukturalne się kompilują.

Potem zrobię coś obiektowo i zobaczymy czy to coś z tym projektem nie tak, czy jednak ogólnie coś nie trybi :P
komentarz 30 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Ooo ziomek, no działa! :D
Tylko nie mów, że każdy projekt będe musiał tak odpalać :P
komentarz 30 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
A dodajesz wszystkie pliki do projektu?
komentarz 30 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
1. Możesz zmienić ustawienia kompilatora w IDE.

2. To co wcześniej widziałeś jest dobre dla małych projektów, można używać MakeFile, Gradle lub coś innego.
komentarz 30 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Przez Project -> Add files nie mogę dodać, dalej nic się nie dzieje, mogę tylko to odpalić tym plikiem exe. Ale to juz coś :P

A jakie ustawienia wg Ciebie powinienem zmienić?
komentarz 30 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
1. Chodzi o ustawienia kompilatora (tego co generuje plik wykonywalny).

2. Zainstalowałeś ponownie CodeBlocks?
komentarz 30 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Zainstalowałem do najnowszej wersji i dalej nie mogę dodawać.
Dodatkowo pojawiła się informacja: Build file: "no target" in "no project" (compiler: unknown) przy każdym projekcie taki się pojawia w Build Logu, ale pliki kompilatora są no i projekty normalnie się kompilują, więc nie wiem o co chodzi xD

http://iv.pl/images/26961640146254879478.jpg coś powinienem zmienić ?
komentarz 30 czerwca 2016 przez MichuDev Pasjonat (20,300 p.)
1. Wpisz: g++ -v.

2. Napisz mi co ci się wyświetla.

3. Mógłbyś dać więcej ustawień np. linkera,preprocesora, etc.
komentarz 1 lipca 2016 przez MichuDev Pasjonat (20,300 p.)
Tam gdzie masz 1 screen'a musisz mieć w miejscu o nazwie 'Compiler's installation directory' folder bin wewnątrz MinGW - w twoim przypadku: D:\CD\CodeBlocks\MinGW\bin.
komentarz 2 lipca 2016 przez sparklemo7ion Początkujący (360 p.)
Zmieniłem, dalej to samo :/
komentarz 2 lipca 2016 przez MichuDev Pasjonat (20,300 p.)

KOD: Zwracasz wynik, a go nie wypisujesz, program bez sensu, jak użytkownik ma się dowiedzieć jaki jest wynik ? Użyje debuggera ? Nawet jak usuniesz jego symbole z pliku korzystając ze strip <nazwa pliku> w gcc ? Chyba oczekujesz od programu odpowiedzi ?

Poprawiony plik kalk.cpp:

#include <iostream>
#include <cstdlib>
#include "kalk.h"
using namespace std;

int Dzialanie::dodawanie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;

    return a+b;
}

int Dzialanie::odejmowanie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a-b;
}

int Dzialanie::mnozenie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a*b;
}

int Dzialanie::dzielenie()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a/b;
}

int Dzialanie::modul()
{
    cout<<"Podaj 2 liczby: ";
    cin>>a;
    cin>>b;
    return a%b;
}

void Dzialanie::wybor()
{
    int co;
    cout <<"CO CHCESZ ZROBIC?"<<endl;
    cout <<"***********************************************"<<endl;
    cout <<"1.Dodawanie"<<endl;
    cout <<"2.Odejmowanie"<<endl;
    cout <<"3.Mnozenie"<<endl;
    cout <<"4.Dzielenie"<<endl;
    cout <<"5.Modul"<<endl;
    cout <<"0.Wyjscie"<<endl;
    cout <<"***********************************************"<<endl;
    cin>>co;

    switch ( co )
    {
    case 1:
        cout << "Wynik: " <<  dodawanie() << endl;
        break;

    case 2:
        cout << "Wynik: " << odejmowanie() << endl;
        break;

    case 3:
        cout << "Wynik: " << mnozenie() << endl;
        break;

    case 4:
        cout << "Wynik: " << dzielenie() << endl;
        break;

    case 5:
        cout << "Wynik: " << modul() << endl;
        break;

    case 0:
        exit(0);
    }
}

Mnie wszystko działa, może dać ci screeny ?

komentarz 2 lipca 2016 przez sparklemo7ion Początkujący (360 p.)
Tak, wiem przegapiłem to, ale poprawiłem kod praktycznie zaraz po wrzuceniu na forum. A błędy dalej wysypuje.
komentarz 2 lipca 2016 przez sparklemo7ion Początkujący (360 p.)
Może nie bawić się, tylko zmienić IDE?
komentarz 2 lipca 2016 przez sparklemo7ion Początkujący (360 p.)
W DevC++ to samo.. Nie rozumiem już...

https://zapodaj.net/5942a5c5dd51e.jpg.html

Podobne pytania

0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 11 sierpnia 2018 w C i C++ przez XSPACE Użytkownik (690 p.)
0 głosów
2 odpowiedzi 152 wizyt
0 głosów
1 odpowiedź 322 wizyt
pytanie zadane 18 września 2020 w C i C++ przez Mateusz Żaba Nowicjusz (150 p.)

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...