[C++] Kompilacja rozłączna - błąd


(Sebastianp88) #1

Witam wszystkich,

zacząłem się bawić tzw kompilacją rozłączną w c++. Jak do tond nie była mi ona potrzebna. Sięgnąłem do poleconej mi książki - szkoła programowania wyd. V - i po zapoznaniu się z tematyką przepisałem programik. Niestety nie widzę błędu. Borland 6 zgłasza mi następujące błędy:

zaś Code::Block takie

IX\I program\file1.o:file1.cpp:(.text+0x19e)||undefined reference to `rect_to_polar(rect)'|

 IX\I program\file1.o:file1.cpp:(.text+0x1d9)||undefined reference to `show_polar(polar)'|

Zawartość plików prezentuje się następująco: Plik coordin.h

//coordin.h - prototypy funkcji i deklaracje sruktur

//deklaracja struktur:

#ifndef COORDIN_H_

#define COORDIN_H_


struct polar

{

	double distance; //odległosc od początku układu współrzędnych

        double angle; //odchylenie od osi

};


struct rect

{

	double x; //odległosc od początku układu współrzędnych (w poziomie)

        double y; //odległosc od początku układu współrzędnych (w pionie)

};

//prototypy:

polar rect_to_polar(rect xypos);

void show_polar(polar dapos);

#endif

Plik file1.cpp

#include 

#include "coordin.h"

using namespace std;


int main()

{

rect rplace;

polar pplace;


cout << "Podaj wartosci x i y: ";

while(cin >> rplace.x >> rplace.y)

{

pplace = rect_to_polar(rplace);

show_polar(pplace);

cout << "Nastepne wspolrzedne (q konczy program): ";

}

cout << "Juz!\n";


return 0;

}

Plik file2.cpp

#include 

#include 

#include "coordin.h"


//konwersja współrzędnych prostokątnych na współrzędne biegunowe

polar rect_to_polar(rect xypos)

{

polar answer;


answer.distance = sqrt(xypos.x * xypos.x + xypos.y * xypos.y);

answer.angle = atan2(xypos.y, xypos.x);

return answer; //zwraca strukturę współrzędnych biegunwych

}


//wyswietlanie współrzędnych biegunowych z konwersją kąta na stopnie

void show_polar(polar dapos)

{

using namespace std;

const double Rad_to_deg = 57.29577951;

cout << "Odleglosc = " << dapos.distance;

cout << ", odchylenie = " << dapos.angle * Rad_to_deg;

cout << " stopni.\n";

}

Gdzie jest błąd? Przyznam szczerze że nie widzę go. Z góry dziękuję za pomoc.


(somekind) #2

W Code::Block w Manegement rozwiń Workspace -> nazwa projektu -> Sources -> PPM na file2.cpp -> Properties -> zakładka Build -> Sekcja "Belongs in targets" -> zaznacz "Debug" i "Release" -> OK


(Leon Xm) #3

Dziwne jak dla mnie błąd (literówka) znajduje się w pierwszej linii file2.cpp:

#include

popraw na:

#include

jeżeli chcesz się nauczyć C++ polecam:

http://helion.pl/ksiazki/cpprim.htm

(Sebastianp88) #4

somekind - zrobiłem tak jak napisałeś i nic. Nadal mam identyczne błędy.

leon_xm - literówka którą wskazałeś nie rozwiązała sprawy.

Nadal nie wiem jak to ruszyć... :frowning:


(Fiołek) #5

A masz oba pliki *.cpp dodane do projektu?


(somekind) #6

To jest cały projekt w CodeBlocks, który działa u mnie: http://www.somekind.pl/_web/rozlaczny.7z


(Sebastianp88) #7

Fiołek - oba pliki *.cpp oraz plik *.h są dodane do projektu.

somekind - Twoje pliki działają; po tym jak Twoje pliki zadziałały raz jeszcze powtórzyłem czynności które napisałeś w I odpowiedzi. Tym razem jednak okazał się to mój błąd. Prawdopodobnie nie zaznaczyłem Debug albo Release

Dziękuję bardzo za pomoc. W końcu programik działa. Tylko nasuwa mi się jedno pytanie; dlaczego programik nie kompiluje się w borlandzie. Ma ktoś może jakieś sugestie?

Raz jeszcze dziękuję za pomoc.


(somekind) #8

Błąd nie leży w Twoim kodzie, lecz w konfiguracji projektu.

Widocznie w Borlandzie też musisz jakoś skonfigurować, które pliki mają być kompilowane. Nie znam tego środowiska, więc nie pomogę.

Spytaj może na http://forum.4programmers.net/ albo na jakimś forum Borlanda. O ile oczywiście nie ma tego w helpie czy też FAQ.


(Sebastianp88) #9

OK.

Raz jeszcze wielkie dzięki