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

Problemy z linkerem

Cloud VPS
0 głosów
566 wizyt
pytanie zadane 24 grudnia 2015 w C i C++ przez niezalogowany
edycja 24 grudnia 2015

Witam, piszę program w Builder C++ 6 do magazynowania ilości oraz właściwości komponentów elektronicznych. Gdy zrobię np Bezpiecznik B1 to wyświetla mi się taki komunikat:

[Linker Error] Unresolved external 'Bezpiecznik::Bezpiecznik(double, double, System::AnsiString)' referenced from K:\BULDER C++\MAGAZYN\UNIT1.OBJ

[Linker Error] Unresolved external 'Bezpiecznik::~Bezpiecznik()' referenced from K:\BULDER C++\MAGAZYN\UNIT1.OBJ

Oto kod z Builder'a:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"

#include "klasy/bezpiecznik.h"
#include "klasy/cewka.h"
#include "klasy/diak.h"
#include "klasy/dioda.h"
#include "klasy/dlawik.h"
#include "klasy/kondensator.h"
#include "klasy/mostek.h"
#include "klasy/potencjometr.h"
#include "klasy/rezystor.h"
#include "klasy/stabilizator.h"
#include "klasy/termistor.h"
#include "klasy/transformator.h"
#include "klasy/tranzystor.h"
#include "klasy/triak.h"
#include "klasy/trymer.h"
#include "klasy/tyrystor.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cdiroutl"
#pragma link "PERFGRAP"
#pragma resource "*.dfm"
TForm1 *Form1;
Komponent *VKomponent;

Bezpiecznik B1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::oprogramie1Click(TObject *Sender)
{
	Form2->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::otwrcach1Click(TObject *Sender)
{
	Form3->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Label2Click(TObject *Sender)
{

	VKomponent->wyswietl();
}
//---------------------------------------------------------------------------

Kod klasy .h:

#ifndef BEZPIECZNIK_H_INCLUDED
#define BEZPIECZNIK_H_INCLUDED

#include "Komponent.h"
class Bezpiecznik :public Komponent
{
public:
    void dodaj();//dodaje bezpiecznik do bazy
    void usun();//usuwa bezpiecznik z bazy
    void zmien();//zmienia wlasciwosci bezpiecznika z bazy
    void wyswietl();//wyswietla ilosc komponentow w bazie

    Bezpiecznik(double=400,double=10,AnsiString="szybki");//konstruktor
    ~Bezpiecznik();//destruktor

private:
    static unsigned int il_bez;//ilosc bezpiecznikow
    double napiecie;//maksymalne napiecie
    double prad;//maksymalny prad
    AnsiString typ;//typ bezpiecznika(szybki itp)
};
#endif // BEZPIECZNIK_H_INCLUDED

Kod klasy .cpp:

#include "bezpiecznik.h"

unsigned int Bezpiecznik::il_bez;

Bezpiecznik::Bezpiecznik(double nap,double amper,string type)
{
    il_bez++;

    napiecie=nap;
    prad=amper;
    typ=type;
}

Bezpiecznik::~Bezpiecznik()
{
    il_bez--;
}

void Bezpiecznik::dodaj()
{

}

void Bezpiecznik::usun()
{

}

void Bezpiecznik::zmien()
{

}

void Bezpiecznik::wyswietl()
{

}

 

2 odpowiedzi

0 głosów
odpowiedź 25 grudnia 2015 przez jeremus Maniak (59,720 p.)
wybrane 26 grudnia 2015
 
Najlepsza
w listingu, który prezentujesz  klasa bezpiecznik jest definiowana  w pliku klasy.h a nie bezpiecznik.h

chyba że coś nie tak komentujesz ..
komentarz 25 grudnia 2015 przez niezalogowany
Tam masz w komentarzu wszystkie Obiekty, żebym mógł kontynuować pracę musiałem je tak dać. Niestety. Dzięki że chcesz mi pomóc :)
komentarz 25 grudnia 2015 przez jeremus Maniak (59,720 p.)
widzę że to trochę bardziej skomplikowane niż myślałem

jutro tym się zajmę - więc proszę o cierpliwość
komentarz 25 grudnia 2015 przez niezalogowany
Spoko, zależy mi na tym projekcie bo to jest dla mojego przyjaciela, który dużo dla mnie robi i chcę mu to dać jako prezent urodzinowy bo ma za niedługo urodziny. Dzięki za uczciwość i za to, że mi pomagasz :)
komentarz 25 grudnia 2015 przez jeremus Maniak (59,720 p.)
1. Aby klasy z nowych modułów ( plików *.cpp, *.h ) były widoczne trzeba je dodać do projektu Opcja : Project->Add to Project

2. Po dodaniu biblioteka skompilowała sie z błędem. Dodałem

#include <vcl.h>

w bezpiecznik.h

i poszło

pozostałe komponenty podobnie...

pozdrawiam
komentarz 26 grudnia 2015 przez niezalogowany
Dzięki za pomoc :) Dostajesz NAJ zasłużyłeś :)
0 głosów
odpowiedź 25 grudnia 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)

Nie wiem czy to jest problemem głównym, ale wydaje mi się, że jest różnica między deklaracją konstruktora a jego definicją:
Deklaracja:

Bezpiecznik(double=400,double=10,AnsiString="szybki");

Definicja:

Bezpiecznik::Bezpiecznik(double nap,double amper,string type)

Raz masz "AnsiString", a raz "string". W C++ Builderze nie programuję, ale z technicznego punktu widzenia wydaje mi się, że linker może nie odnajdować definicji konstruktora, który zadeklarowałeś. Spróbuj to poprawić. Sam jestem ciekaw ;-)

komentarz 25 grudnia 2015 przez niezalogowany
Poprawiłem to i nic się nie zmieniło. Tak jakby nie widział pliku bezpiecznik.cpp ale przecież wszystko podpiąłem

Podobne pytania

0 głosów
2 odpowiedzi 598 wizyt
0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 16 stycznia 2017 w C i C++ przez Ala123456 Użytkownik (760 p.)
0 głosów
2 odpowiedzi 4,398 wizyt
pytanie zadane 14 listopada 2016 w C i C++ przez xjakubekx Obywatel (1,280 p.)

93,488 zapytań

142,422 odpowiedzi

322,773 komentarzy

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

Kursy INF.02 i INF.03
...