Avatar billede connorz Nybegynder
03. december 2003 - 13:52 Der er 13 kommentarer og
1 løsning

Forklaring på koblingen af filer!

Hej eksperter

Lige et spørgsmål fra en ny i C++

Jeg har lavet en header-fil, Verylong.h, der indeholder en klasse, verylong, med deklarationer (ikke definitioner) af forskellige funktioner.
Jeg har så også lavet en fil, Verylong.cpp, der indeholder alle definitionerne på de forskellige funktioner i verylong. Dette gøres fx vha. verylong::getvl() for funktionen getvl()
Jeg har så en ny fil, Vl_app.cpp, der skal benytte sig af klassen verylong. Jeg har derfor som første linie i denne fil:
#include "Verylong.h"
(filerne ligger i samme bib)
Men når forsøger at kompilere Vl_app.cpp, siger linkeren:
---------- Capture Output ----------
"bcc32.exe" Vl_app.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Vl_app.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external 'verylong::operator *(const verylong)' referenced from C:\DOCUMENTS AND SETTINGS\K\MY DOCUMENTS\VL_APP.OBJ
Error: Unresolved external 'verylong::putvl() const' referenced from C:\DOCUMENTS AND SETTINGS\K\MY DOCUMENTS\02393\UGE11\VL_APP.OBJ
Terminated with exit code 1

Er det fordi, den ikke kan finde Verylong.obj?? Eller hvad er der galt? Sikkert bare en newbie-30-50-fejl, men nu har jeg rodet med det et stykke tid! Plz help!
Avatar billede connorz Nybegynder
03. december 2003 - 13:54 #1
ups - biblioteket, som linkeren refererer til, er selvfølgelig det samme i begge fejl - jeg kom vist bare til at slette lidt af den ene ved indsættelsen!
Avatar billede jpk Nybegynder
03. december 2003 - 13:56 #2
Og du har ikke glemt at implementere operator * og metoden putvl()..?
Avatar billede arne_v Ekspert
03. december 2003 - 13:57 #3
Du har jo selv sagt hav det er - du mangler at link VL_app mod
Verylong.obj
Avatar billede connorz Nybegynder
03. december 2003 - 14:23 #4
funktionerne er implementeret i Verylong.cpp

arne_v >>> hvordan skal dette gøres? Lige nu kompilerer jeg Vl_app.cpp vha. Borlands compiler, dvs med:
bcc32 Vl_app.cpp
Linker den så ikke automatisk det der skal linkes, eller skal jeg gøre det mere manuelt?
Avatar billede arne_v Ekspert
03. december 2003 - 14:30 #5
Prøv bare med:

bcc32 Vl_app.cpp Verylong.cpp
Avatar billede connorz Nybegynder
03. december 2003 - 15:07 #6
hey det virker squ - mange tak...

Men meningen var jo egentlig, at Verylong.h skulle kunne inkluderes i toppen af enhver fil og dermed skulle funktionerne kunne bruges. Burde man ikke kunne det vha. den oprettede obj-fil?
smid i øvrigt et svar, så du kan få p.!
Avatar billede arne_v Ekspert
03. december 2003 - 15:11 #7
Du må ikke inkludere .cpp filer med implementerimger - kun .h filer
med erklæringer.
Avatar billede arne_v Ekspert
03. december 2003 - 15:11 #8
svar
Avatar billede arne_v Ekspert
03. december 2003 - 15:13 #9
Hvis du vil compile hver for sig, så prøv:

bcc32 -c Verylong.cpp
bcc32 -c Vl_app.cpp
bcc32 Vl_app.obj Verylong.obj

(og ja det er det man gør med større ting)
Avatar billede connorz Nybegynder
03. december 2003 - 17:42 #10
hvis man nu fx ønsker IO, kan man sige
#include <iostream>
dermed finder den iostream (.h eller .obj??) i ens include/lib bib. ikke?
men så kan jeg vel lave noget lignende i Vl_app kan jeg ikke?
Avatar billede arne_v Ekspert
03. december 2003 - 17:46 #11
#include <iostream>

includerer en fil der hedder iostream og som ligger i et directory hvor
bcc32 kigger efter include filer.

Implementationen af den kode ligger i et library som bcc32 også automatisk
kigger efter.

Du kan godt lave dit eget include directory og et library.

Men vent med det til din app bliver noget større.
Avatar billede connorz Nybegynder
03. december 2003 - 18:01 #12
jamen det jeg så ikke forstår er, at når jeg i ovenstående eksempel inkluderer Verylong.h, hvorfor finder bcc32 så ikke også automatisk min implemtation som ligger i Verylong.obj??
Avatar billede arne_v Ekspert
03. december 2003 - 18:07 #13
At finde .h og .obj har intet med hianden at gøre.

#include "Verylong.h"

får compileren til at lede efter Verylong.h i current directory.

Linkeren leder derimod ikke efter Verylong.obj af sig selv.
Avatar billede connorz Nybegynder
03. december 2003 - 18:10 #14
ok - er vist ved at fange det - tror jeg ;)

Mange tak for hjælpen...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester