Thread overview
Previous definition different errror
Jun 17, 2003
chris elliott
Jun 17, 2003
Walter
Jun 17, 2003
chris elliott
Jun 17, 2003
Wichetael
Jun 17, 2003
Walter
Jun 17, 2003
chris elliott
Jun 17, 2003
Walter
June 17, 2003
I have a header file for my wxhatch application, which contains a collection of lines like this

const wxString space = wxT(' ');

which are used in several code .cpp files.

On linking the files I get errors

 Error 1: Previous Definition Different : ?space@@3VwxString@@B (const
wxString space)

My compile and link lines are

dmc -c -o -mn -W -H -D__NT__ -DWIN32 -D__WIN32__ -D__WIN95__ -D__WINDOWS__ -
D__W
XMSW__ -D__SC__ -D__WXDEBUG__  -I..\..\wxWindows\include -I..\..\wxWindows\l
ib\_
sc -I..\..\wxWindows\contrib\include -I..\..\wxWindows/src/regex;..\..\wxWin
dows
/src/png;..\..\wxWindows/src/jpeg;..\..\wxWindows/src/zlib;..\..\wxWindows/s
rc/t
iff  wxhatch.cpp -owxhatch.obj

.... more lines all the same


link  /DELEXECUTABLE /RC -L/exet:nt/su:windows wxhatch.obj wxhcombo.obj
bitmenu.
obj mcanvas.obj mytext.obj tchild.obj trchild.obj lchild.obj mchild.obj
raddlg.o
bj textdlg.obj startdlg.obj srdlg.obj mnudlg.obj cfgdlg.obj tooldlg.obj
mcdlg.ob
j , wxhatch.exe, wxhatch, ..\..\wxWindows\lib\ wx_sc.lib
..\..\wxWindows\lib\stc
_sc.lib png_sc tiff_sc jpeg_sc zlib_sc shell32_sc wsock32_sc advapi32
comctl32 c
omdlg32 ctl3d32 gc  gdi32 kernel32 ole32 oleaut32 snn user32 uuid
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

bitmenu.obj(bitmenu)  Offset 000B1H Record Type 0091
 Error 1: Previous Definition Different : ?wxH_VersionString@@3VwxString@@B
(con
st wxString wxH_VersionString)


thanks
chris


June 17, 2003
"chris elliott" <biol75@york.ac.uk> wrote in message news:bcmojg$q29$1@digitaldaemon.com...
> I have a header file for my wxhatch application, which contains a
collection
> of lines like this
>
> const wxString space = wxT(' ');
>
> which are used in several code .cpp files.
>
> On linking the files I get errors
>
>  Error 1: Previous Definition Different : ?space@@3VwxString@@B (const
> wxString space)

Move the line in the header to a .cpp file. Replace the line in the header with:

    extern const wxString space;


June 17, 2003
"Walter" <walter@digitalmars.com> wrote in message news:bcnd45$1cs2$1@digitaldaemon.com...
>
> "chris elliott" <biol75@york.ac.uk> wrote in message news:bcmojg$q29$1@digitaldaemon.com...
> > I have a header file for my wxhatch application, which contains a
> collection
> > of lines like this
> >
> > const wxString space = wxT(' ');
> >
> > which are used in several code .cpp files.
> >
> > On linking the files I get errors
> >
> >  Error 1: Previous Definition Different : ?space@@3VwxString@@B (const
> > wxString space)
>
> Move the line in the header to a .cpp file. Replace the line in the header with:
>
>     extern const wxString space;
>
>
That worked fine,
So is this a bug in DM or a "feature" of the other compilers?
chris


June 17, 2003
It's more of a 'feature' of other compilers. In essence by *defining* the constant in the header file you *define* it multiple times as the header is included in multiple objects, (as in files, not in OO instances.) Strictly speaking this is not allowed by the standard, (at least afaik,) and what you should do instead, (as Walter suggested,) is *declare* the constant in the header file, but *define* it in a source file so that it is included in only one object. Some compilers simply silently ignore multiple definitions and drop all the definitions that come after the first one. But that is of course a non-standard approach and it is ill advised to rely on this if you want your code to be portable.

btw, Walter, why does the compiler report that the previous definition is different? Shouldn't it report that it is a multiple definition since the definitions are actually the same?

Hope I got all my terms ans stuff right ;)

Regards, Remko van der Vossen.

"chris elliott" <chris@ampleforth.u-net.com> wrote in message news:bcnl2i$1kl8$1@digitaldaemon.com...
>
> "Walter" <walter@digitalmars.com> wrote in message news:bcnd45$1cs2$1@digitaldaemon.com...
> >
> > "chris elliott" <biol75@york.ac.uk> wrote in message news:bcmojg$q29$1@digitaldaemon.com...
> > > I have a header file for my wxhatch application, which contains a
> > collection
> > > of lines like this
> > >
> > > const wxString space = wxT(' ');
> > >
> > > which are used in several code .cpp files.
> > >
> > > On linking the files I get errors
> > >
> > >  Error 1: Previous Definition Different : ?space@@3VwxString@@B (const
> > > wxString space)
> >
> > Move the line in the header to a .cpp file. Replace the line in the
header
> > with:
> >
> >     extern const wxString space;
> >
> >
> That worked fine,
> So is this a bug in DM or a "feature" of the other compilers?
> chris
>
>


June 17, 2003
"chris elliott" <chris@ampleforth.u-net.com> wrote in message news:bcnl2i$1kl8$1@digitaldaemon.com...
> That worked fine,
> So is this a bug in DM or a "feature" of the other compilers?

The way DM works is the way the language is defined to work. You might be seeing an extension done by other compilers.


June 17, 2003
"Wichetael" <wichetael@gmx.net> wrote in message news:bcnn06$1mat$1@digitaldaemon.com...
> btw, Walter, why does the compiler report that the previous definition is different? Shouldn't it report that it is a multiple definition since the definitions are actually the same?

Yes, that would be better.


June 17, 2003
yes, I would live with it if it said the definitons were the same.... Different definitons made me think it was a linker bug

chris
"Walter" <walter@digitalmars.com> wrote in message
news:bcnpjg$1p52$2@digitaldaemon.com...
>
> "Wichetael" <wichetael@gmx.net> wrote in message news:bcnn06$1mat$1@digitaldaemon.com...
> > btw, Walter, why does the compiler report that the previous definition
is
> > different? Shouldn't it report that it is a multiple definition since
the
> > definitions are actually the same?
>
> Yes, that would be better.
>
>