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

Undefined reference to... c++ dzielenie funkcji na pliki .cpp i .h

0 głosów
648 wizyt
pytanie zadane 2 listopada 2020 w C i C++ przez MONKNOW Użytkownik (720 p.)
edycja 2 listopada 2020 przez MONKNOW

Witam, chciałbym korzystać z napisanych funkcji tak jak z obiektów za pomocą plików .h i .cpp. Niestety dostałem błąd, który z tego co zorientowałem się, jest błędem linkera : Undefined reference to dodawanie(int, int). Program pisze w Codeblocks, typ projektu wybrałem odpowiedni (Console Application). Wygląda to tak:

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

int main()
{
    int wynik;
    int x, y;
    cout << "Hello world!" << endl;
    cin >> x >> y;
    wynik = dodawanie(x, y);
    cout << wynik << endl;
    return 0;
}
#ifndef FUNKCJA_H
#define FUNKCJA_H

#include <iostream>

using namespace std;

int dodawanie(int x, int y);
#endif
#include <iostream>
#include "funkcja.h"

using namespace std;

int dodawanie(int x, int y){
    return x + y;
}

Edit: Sory, źle skopiowałem wcześniej jeden wycinek kodu.

2 odpowiedzi

+1 głos
odpowiedź 3 listopada 2020 przez TOM_CPP Pasjonat (22,640 p.)
wybrane 3 listopada 2020 przez MONKNOW
 
Najlepsza
  1. Utwórz nowy projekt konsolowy, skopiuj poprzedni kod do main.cpp
  2. Następnie dodaj klasę do projektu o nazwie Funkcja poprzez zakładkę File->New->Class...
  3. W plikach Funkcja.h i Funkcja.cpp zmodyfikuj odpowiednio kod.

 

komentarz 3 listopada 2020 przez MONKNOW Użytkownik (720 p.)
God bless you
0 głosów
odpowiedź 2 listopada 2020 przez j23 Mędrzec (195,240 p.)

Dodaj plik funkcja.cpp do projektu.

I wywal #include <iostream> i using namespace std; z funkcja.h i funkcja.cpp.

komentarz 2 listopada 2020 przez MONKNOW Użytkownik (720 p.)
Wszystkie pliki, które wyżej wspomniałem są już w projekcie. Wywaliłem te dyrektywy i nic sie nie zmieniło :( path w build options też już ustawiałem.. kompletnie nie wiem czemu tak się dzieje. Przy klasycznej obiektówce z klasami problem ten sam.
komentarz 2 listopada 2020 przez tangarr Mędrzec (155,180 p.)
Najlepiej będzie, jeżeli wkleisz tutaj zawartość pliku projektowego.
komentarz 2 listopada 2020 przez MONKNOW Użytkownik (720 p.)
Skopiowałem każdą zakładke z codeblocksa, to nie to samo? Jest jakiś inny sposób?
komentarz 2 listopada 2020 przez tangarr Mędrzec (155,180 p.)
Każda zakładka to osobny edytor tekstowy.
To że masz pootwierane jakieś zakładki nie znaczy, że te pliki znajdują się w twoim projekcie.
komentarz 2 listopada 2020 przez j23 Mędrzec (195,240 p.)

@MONKNOW, otwórz projekt, poszukaj opcji Add files, wybierz plik i kompiluj.

 

 

komentarz 2 listopada 2020 przez MONKNOW Użytkownik (720 p.)

oOczywiscie wszystko tak jak wspomniałem dodane zostało do projektu z Add files itp.. przy próbie kompilowania odsyła mnie do tego błędu

 

komentarz 2 listopada 2020 przez j23 Mędrzec (195,240 p.)
Ciekawe. Powinno być OK.

Usuń plik z projektu i dodaj go jeszcze raz.
komentarz 2 listopada 2020 przez tangarr Mędrzec (155,180 p.)
Ja bym raczej zamknął CodeBlocksa, potem usunął zbudowane pliki (prawodpowodbnie znajdują się w podkatalogach debug/release katalogu ze źródłami) i wtedy spróbował ponowanie.

Ewentualnie sprawdziłbym, czy ścieżka do katalogu ze źródłami nie zawiera spacji lub polskich znaków (być może CodeBlocks niepoprawnie przekazuje ścieżki do kompilatora).
komentarz 3 listopada 2020 przez MONKNOW Użytkownik (720 p.)
Nie mam polskich znaków w ścieżce, zbudowane pliki usuwałem i nadal nic :(

Podobne pytania

0 głosów
1 odpowiedź 910 wizyt
0 głosów
2 odpowiedzi 723 wizyt
0 głosów
2 odpowiedzi 925 wizyt

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,786 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...