|
| Header fil include fejl Fra : Michael Bøcker-Larse~ |
Dato : 29-07-01 15:21 |
|
Hej NG håber I kan hjælpe
---- util.h ----
extern void funktion();
---- util.c ----
#include "util.h"
void funktion() {
// do nothing
}
---- main.cpp ----
#include "util.c"
void main(){
funktion();
}
----------------------------------
Det er filerne der er involveret. Når jeg compiler/linker får jeg følgende
fejl:
Linking...
Test.obj : error LNK2001: unresolved external symbol "void __cdecl
funktion(void)" (?funktion@@YAXXZ)
Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
Please help
Mvh
Michael Bøcker-Larsen
| |
Mogens Hansen (29-07-2001)
| Kommentar Fra : Mogens Hansen |
Dato : 29-07-01 16:53 |
|
Hej Michael,
"Michael Bøcker-Larsen" <michael@mblarsen.dk> wrote in message
news:3b641b9d$0$4669$ba624c82@nntp01.dk.telia.net...
> Hej NG håber I kan hjælpe
>
> ---- util.h ----
> extern void funktion();
>
> ---- util.c ----
> #include "util.h"
>
> void funktion() {
> // do nothing
> }
>
> ---- main.cpp ----
> #include "util.c"
Det er atypisk at includere en C fil (men ikke nødvendigvis forkert - hvad
som helst kan includere).
Normalt er det header filen man includerer.
C filen tilføjer man som oftest til build-projektet.
Det ser ud som om at du bruger Microsoft Visual C++, så du vælger "FileView"
i Workspace og højreklikker på dit projekt og vælger "Add Files to
project...".
>
> void main(){
> funktion();
> }
>
>
> ----------------------------------
> Det er filerne der er involveret. Når jeg compiler/linker får jeg følgende
> fejl:
>
> Linking...
> Test.obj : error LNK2001: unresolved external symbol "void __cdecl
> funktion(void)" (?funktion@@YAXXZ)
> Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
Når jeg laver de filer du har angivet ovenfor, compilerer og linker det uden
problemer i Microsoft Visual C++ V6.0 (selvom det _ikke_ burde: main _skal_
returnere en int).
Hvis du har skrevet #include "util.h" i main.cpp, kan jeg forstå at du får
den nævnte fejl.
Jeg gætter på at dit problem stammer fra et større projekt.
Dit problem er hvordan du får C og C++ til at arbejde sammen.
C++ dekorerer funktionsnavne med ekstra information, som siger noget om
parametrenes typer.
Læg mærke til at din funktion hedder "?funktion@@YAXXZ".
Det kaldes name mangling.
Du kan bruge preprocessor macroen "__cplusplus" til at afgøre om compileren
er i færd med at oversætte en C eller en C++ fil.
Prøv med følgende filer:
------ util.h --------
#ifndef UTIL_H_GUARD
#define UTIL_H_GUARD
#ifdef __cplusplus
extern "C" {
#endif //#ifdef __cplusplus
void funktion(void);
#ifdef __cplusplus
} // end of exter "C"
#endif //#ifdef __cplusplus
#endif //#ifndef UTIL_H_GUARD
------ util.c --------
#include "util.h"
void funktion(void)
{
// do nothing
}
------ main.cpp ------
#include "util.h"
int main(void)
{
funktion();
return 0;
}
Det virker for mig, og burde også på en hvilken som helst anstændig C++
compiler.
Venlig hilsen
Mogens Hansen
| |
Michael Bøcker-Larse~ (30-07-2001)
| Kommentar Fra : Michael Bøcker-Larse~ |
Dato : 30-07-01 11:06 |
|
Hej Mogens tak for dit indlæg man jeg fandt ud af hvad jeg gjorde forket.
Rigtig nok manglede jeg "C" tingen efter extern, men jeg skulle også lige
rename util.c til util.cpp så virkede det.
Det var ikke et forsøg på at få c og c++ til at virke sammen
"Mogens Hansen" <mogens_h@dk-online.dk> wrote in message
news:9k1bb0$ok7$1@news.cybercity.dk...
> Hej Michael,
>
> "Michael Bøcker-Larsen" <michael@mblarsen.dk> wrote in message
> news:3b641b9d$0$4669$ba624c82@nntp01.dk.telia.net...
> > Hej NG håber I kan hjælpe
> >
> > ---- util.h ----
> > extern void funktion();
> >
> > ---- util.c ----
> > #include "util.h"
> >
> > void funktion() {
> > // do nothing
> > }
> >
> > ---- main.cpp ----
> > #include "util.c"
>
> Det er atypisk at includere en C fil (men ikke nødvendigvis forkert - hvad
> som helst kan includere).
> Normalt er det header filen man includerer.
> C filen tilføjer man som oftest til build-projektet.
> Det ser ud som om at du bruger Microsoft Visual C++, så du vælger
"FileView"
> i Workspace og højreklikker på dit projekt og vælger "Add Files to
> project...".
>
> >
> > void main(){
> > funktion();
> > }
> >
> >
> > ----------------------------------
> > Det er filerne der er involveret. Når jeg compiler/linker får jeg
følgende
> > fejl:
> >
> > Linking...
> > Test.obj : error LNK2001: unresolved external symbol "void __cdecl
> > funktion(void)" (?funktion@@YAXXZ)
> > Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
>
> Når jeg laver de filer du har angivet ovenfor, compilerer og linker det
uden
> problemer i Microsoft Visual C++ V6.0 (selvom det _ikke_ burde: main
_skal_
> returnere en int).
> Hvis du har skrevet #include "util.h" i main.cpp, kan jeg forstå at du får
> den nævnte fejl.
>
> Jeg gætter på at dit problem stammer fra et større projekt.
> Dit problem er hvordan du får C og C++ til at arbejde sammen.
> C++ dekorerer funktionsnavne med ekstra information, som siger noget om
> parametrenes typer.
> Læg mærke til at din funktion hedder "?funktion@@YAXXZ".
> Det kaldes name mangling.
>
> Du kan bruge preprocessor macroen "__cplusplus" til at afgøre om
compileren
> er i færd med at oversætte en C eller en C++ fil.
>
> Prøv med følgende filer:
> ------ util.h --------
> #ifndef UTIL_H_GUARD
> #define UTIL_H_GUARD
>
> #ifdef __cplusplus
> extern "C" {
> #endif //#ifdef __cplusplus
>
> void funktion(void);
>
> #ifdef __cplusplus
> } // end of exter "C"
> #endif //#ifdef __cplusplus
>
>
> #endif //#ifndef UTIL_H_GUARD
>
>
> ------ util.c --------
> #include "util.h"
>
> void funktion(void)
> {
> // do nothing
> }
>
> ------ main.cpp ------
>
> #include "util.h"
>
> int main(void)
> {
> funktion();
> return 0;
> }
>
> Det virker for mig, og burde også på en hvilken som helst anstændig C++
> compiler.
>
>
> Venlig hilsen
>
> Mogens Hansen
>
>
| |
|
|