Strona 1 z 1

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

: 21 lis 2009, 21:05
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ć...

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

: 21 lis 2009, 21:26
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; ).

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

: 21 lis 2009, 21:46
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?

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

: 21 lis 2009, 22:05
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.

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

: 22 lis 2009, 10:08
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 :-(

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

: 22 lis 2009, 13:55
autor: ccl
macer pisze:Jakiego błędu?
deque d zamien na deque<int> d;

Zwykle g++ *cpp u mnie kompiluje

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

: 22 lis 2009, 14:46
autor: macer
Usunąłem to z przed chwili...
Co innego skompilowałem i uruchomiłem...

EDIT:
Ale działa ;-)