Kirjoitan Borlandin C++ Builder 6:lla ohjelmaa, joka koostuu useammasta moduulista. Main-modulista yritän käyttää toisen modulin funktiota, mutta kääntäjä herjaa että:
"[Linker Error] Unresolved external 'TCHECK_PAR::check_par_start()' referenced from C:\PEP\PEP PROJECT\MAIN.OBJ"
En tiedä todellakaan mitä minulla puuttuu ja mistä. Helppi kertoo että:
"Unresolved external symbol referenced from module
The named symbol is referenced in the given module but is not defined anywhere in the set of object files and libraries included in the link. Check to make sure the symbol is spelled correctly.
You will usually see this error from the linker for C or C++ symbols if any of the following occur:
You did not properly match a symbol’s declarations of __pascal and __cdecl types in different source files.
You have omitted the name of an .OBJ file your program needs.
You did not link in the emulation library.
If you are linking C++ code with C modules, you might have forgotten to wrap C external declarations in extern “C”.
You could also have a case mismatch between two symbols."
Joten jos joku osaisi auttaa asiassa olisin kiitollinen..
Lisäyksenä vähän koodia ongelmatilanteen parempaan kuvaukseen. Todellakin tästä varmaan jostain puuttuu vain jotain pientä, mutta olen kokeillut jo vaikka mitä enkä ole saanut 'linker error':ia pois.
Apu olisi tarpeen. Projekti viivästyy..
// Main.h // Täällä ei mitään näiden unit:tien väliseen yhteyteen liittyvää. // Ehkä pitäisi olla, mutta mitä??
// Main.cpp include <vcl.h> #pragma hdrstop #include "Main.h" // ... #include "Check_par.h" // ... #pragma package(smart_init) #pragma resource "*.dfm" TPEPMain *PEPMain; TCHECK_PAR *CHECK_PAR; // ... void __fastcall TPEPMain::Run1Click(TObject *Sender) { CHECK_PAR->check_par_start(); }
// Check_par.h #ifndef Check_parH #define Check_parH #include <Classes.hpp> // ... class TCHECK_PAR { public: void check_par_start(); }; //--------------------------------------------------------------------------- extern PACKAGE TCHECK_PAR *CHECK_PAR; //--------------------------------------------------------------------------- #endif
// Check_par.cpp #pragma hdrstop #include "Check_par.h" #include "Main.h" #pragma package(smart_init) void check_par_start() { // koodia }
mod.edit: kooditagit[/i]!
Jos (ja todennäköisesti kun) modulit ovat erillisissä tiedostoissa, on kaikki .cpp:t ja .c:t lisättävä projektiin mukaan että kääntäjä tajuaa tehdä niille jotain.
Kaikki ovat projektissa mukana.
Hmm, pitäisikö tuolla Check_par.cpp:ssä olla paremminkin
void TCHECK_PAR::check_par_start() { // koodia }
Joo, kyllä. Tietenkin! Vanha koodi uuteen käyttöliittymään ni ei tullu huomattua. Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.