[C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

[C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Post autor: macer »

Witam ;-)
Tak jak w temacie, kompilator wywala mi coś takiego:

Kod: Zaznacz cały

main.cpp:(.text+0x181): undefined reference to `na_dwojkowy(int)'
Błąd jest dziwny(znaczy linijka na której on jest), ale jest tylko jedno wywołanie tej funkcji ;-)

no to tak:

przeliczacz.h

Kod: Zaznacz cały

#include<iostream>
#include<deque>
using namespace std;
deque<int> na_dwojkowy(int n);
przeliczacz.cpp

Kod: Zaznacz cały

#include "przeliczacz.h"
deque<int> na_dwojkowy(int n)
{
        deque d;
        while(n != 0)
        {
            d.push_front(n % 2);
            n = n/2;
        }
        
}
main.cpp

Kod: Zaznacz cały

#include<iostream>
#include "przeliczacz.h"
using namespace std;
int main(int argc,char* argv[])
{    
        char c;
        cout << "Witaj w programie!" << endl;
        cout << "1) z dzisiętnego na dwójkowy" << endl;
        cout << "2) z dwójkowego na dziesiętny" << endl;
        cout << "3) wyjście z programu" << endl;
        cout << "Twój wybór?: ";
        cin >> c;
        switch(c)
        {
            case '1':
            {
                cout << "Podaj liczbę w systemie dzisiętnym: ";
                int nu;
                cin >> nu;
                deque<int> d = na_dwojkowy(nu);
                cout << "Liczba w systemie dziesiętnym to: ";
                for(int i = 0;i < (int)d.size();i++)
                {
                    cout << d[i];
                }
                cout << endl;
            }
            case '2':{}
            case '3': return 0;
        }
        
}

EDIT:
Oczywiście pytanie brzmi jak to naprawić...
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Post autor: beluosus »

Wygląda na to, że kompilujesz tylko plik main.cpp. Rozwiązanie:
- skompilować z wiersza poleceń g++ *.cpp
- skompilować w jakimś IDE
- zrobić Makefile
Zadziała oczywiście po poprawieniu błędu ( deque<int> d; ).
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

Odp: [C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Post autor: macer »

Używam geany.
Gdyby kompilował się tylko main.cpp, to wywalało by nie znaleziono pliku "przeliczanie.h".
[quote="beluosus"]
Zadziała oczywiście po poprawieniu błędu ( deque<int> d]
Jakiego błędu?

EDIT:
Rzeczywiście tylko jeden plik ;-)

EDIT:
Jak zmusić geany aby skompilował wszystkie pliki?
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Post autor: beluosus »

Kompilator widzi plik, problem pojawia się przy linkowaniu (co zresztą widać po errorze).
W Zbuduj->Ustawienia budowania i kompilacji można dać coś takiego:

Kod: Zaznacz cały

g++ -Wall -ansi -pedantic -o "%e" *.cpp
Ale to raczej jest nieprofesjonalne i lepszym rozwiązaniem będzie - tak jak wspomniałem wyżej - stworzenie Makefile i kompilowanie przez Zbuduj->Zbuduj wszystko. Aczkolwiek trzeba umieć pisać owe Makefiles.

rzeczywiście*

PS Przy okazji, w

Kod: Zaznacz cały

for(int i = 0;i < (int)d.size();i++)
Daj unsigned i, zamiast size() rzutować (w stylu C) na int. "i" w tym przypadki jest >= 0 oraz obędzie się bez rzutowania.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

Odp: [C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Post autor: macer »

Umiem robić makefile, ale zostaje:

Kod: Zaznacz cały

przeliczacz.cpp:2: invalid declarator before 'na_dwojkowy'
:-(

EDIT:
hmmm...przecież deklarator jest taki sam jak w nagłówku :-(
ccl
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 22 lis 2009, 13:52
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Post autor: ccl »

macer pisze:Jakiego błędu?
deque d zamien na deque<int> d;

Zwykle g++ *cpp u mnie kompiluje
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

Odp: [C++]Program nie widzi zadeklarowanej w nagłówku funkcji?

Post autor: macer »

Usunąłem to z przed chwili...
Co innego skompilowałem i uruchomiłem...

EDIT:
Ale działa ;-)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości