Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > namespace question

Reply
Thread Tools

namespace question

 
 
John
Guest
Posts: n/a
 
      06-02-2004
Hi all:

I am using a code from third party. I write my own part and add it to
that code and compile together.
I try to use "vector" in my program. So I add "#include <vector>" to
my program.
But when I compile my program together with the code from the third
party,
the compiler reports error: redefinition of `class vector'.

I look at the code from the third party and find that in one file of
that code,
"class vector" is defined for other purpose.
I can not modify the code from the third party, because it may make
the situation worse.
What should I do to my own program to solve the name confliction
problem?

Thanks a lot.

John
 
Reply With Quote
 
 
 
 
Sharad Kala
Guest
Posts: n/a
 
      06-02-2004

"John" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) m...
> Hi all:
>
> I am using a code from third party. I write my own part and add it to
> that code and compile together.
> I try to use "vector" in my program. So I add "#include <vector>" to
> my program.
> But when I compile my program together with the code from the third
> party,
> the compiler reports error: redefinition of `class vector'.
>
> I look at the code from the third party and find that in one file of
> that code,
> "class vector" is defined for other purpose.
> I can not modify the code from the third party, because it may make
> the situation worse.
> What should I do to my own program to solve the name confliction
> problem?


Don't write using namesapce std; in your code. You will need to refer to the
standard vector class as std::vector then.


 
Reply With Quote
 
 
 
 
Rolf Magnus
Guest
Posts: n/a
 
      06-02-2004
John wrote:

> Hi all:
>
> I am using a code from third party. I write my own part and add it to
> that code and compile together.
> I try to use "vector" in my program. So I add "#include <vector>" to
> my program.
> But when I compile my program together with the code from the third
> party, the compiler reports error: redefinition of `class vector'.
>
> I look at the code from the third party and find that in one file of
> that code, "class vector" is defined for other purpose.
> I can not modify the code from the third party, because it may make
> the situation worse.
> What should I do to my own program to solve the name confliction
> problem?


The C++ standard class vector is in namespace std, so unless your 3rd
party library puts it there, too, there shouldn't be a name conflict.
After all, that's why namespaces exist.
If your compiler doesn't put vector into namespace std, then it is
probably quite outdated and you should consider using a more recent
one.

 
Reply With Quote
 
JKop
Guest
Posts: n/a
 
      06-02-2004
John posted:

> Hi all:
>
> I am using a code from third party. I write my own part and add it to
> that code and compile together.
> I try to use "vector" in my program. So I add "#include <vector>" to
> my program.
> But when I compile my program together with the code from the third
> party,
> the compiler reports error: redefinition of `class vector'.
>
> I look at the code from the third party and find that in one file of
> that code,
> "class vector" is defined for other purpose.
> I can not modify the code from the third party, because it may make
> the situation worse.
> What should I do to my own program to solve the name confliction
> problem?
>
> Thanks a lot.
>
> John



namespace ThirdParty
{

#include <thirdpary>
}


std::vector
ThirdParty::vector


using namespace std


vector //refers to std::vector



-JKop
 
Reply With Quote
 
Dave Moore
Guest
Posts: n/a
 
      06-02-2004
http://www.velocityreviews.com/forums/(E-Mail Removed) (John) wrote in message news:<(E-Mail Removed) om>...
> Hi all:
>
> I am using a code from third party. I write my own part and add it to
> that code and compile together.
> I try to use "vector" in my program. So I add "#include <vector>" to
> my program.
> But when I compile my program together with the code from the third
> party,
> the compiler reports error: redefinition of `class vector'.
>
> I look at the code from the third party and find that in one file of
> that code,
> "class vector" is defined for other purpose.
> I can not modify the code from the third party, because it may make
> the situation worse.
> What should I do to my own program to solve the name confliction
> problem?


Well, the vector template that is defined in <vector> resides in
namespace std, so you should still be able to use it even in the
presence of the other vector class by specifying std::vector instead
of just vector. Note also that getting rid of using directives (e.g.
using namespace std) is generally a good idea, and will help identify
more name collisions between std::vector and your vendors' vector as
well.

HTH, Dave Moore



> Thanks a lot.
>
> John

 
Reply With Quote
 
David Harmon
Guest
Posts: n/a
 
      06-02-2004
On Wed, 02 Jun 2004 12:32:50 GMT in comp.lang.c++, JKop <(E-Mail Removed)>
wrote,
>namespace ThirdParty
>{
>
> #include <thirdpary>
>}


You think so, huh? Where is the linker going to find the definition of
ThirdParty::vector or anything else?

 
Reply With Quote
 
John
Guest
Posts: n/a
 
      06-02-2004
Hi all:

Thanks for reply.
In my program, I already use std::vector except the line: #include
<vector>.
Below is part of the error message:
In file included from
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/vector.h:32,
from mycode.cc:35:
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_vector.h:153:
`vector' is not a template type
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_vector.h:154:
redefinition of `class vector'
mobile/god.h:117: previous definition here
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_vector.h:156:
invalid member template declaration `vector::_Base'
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_vector.h:158:
invalid member template declaration `vector::value_type'

mycode.cc is my own code. Line 35 is #include <vector>. mobile/god.h
is the code
from third party.
I also use list in my code, the compiler does not complain it.

Thanks a lot.

John

Rolf Magnus <(E-Mail Removed)> wrote in message news:<c9k72p$3q5$01$(E-Mail Removed)-online.com>...
> John wrote:
>
> > Hi all:
> >
> > I am using a code from third party. I write my own part and add it to
> > that code and compile together.
> > I try to use "vector" in my program. So I add "#include <vector>" to
> > my program.
> > But when I compile my program together with the code from the third
> > party, the compiler reports error: redefinition of `class vector'.
> >
> > I look at the code from the third party and find that in one file of
> > that code, "class vector" is defined for other purpose.
> > I can not modify the code from the third party, because it may make
> > the situation worse.
> > What should I do to my own program to solve the name confliction
> > problem?

>
> The C++ standard class vector is in namespace std, so unless your 3rd
> party library puts it there, too, there shouldn't be a name conflict.
> After all, that's why namespaces exist.
> If your compiler doesn't put vector into namespace std, then it is
> probably quite outdated and you should consider using a more recent
> one.

 
Reply With Quote
 
Rolf Magnus
Guest
Posts: n/a
 
      06-02-2004
John wrote:

> Hi all:
>
> Thanks for reply.
> In my program, I already use std::vector except the line: #include
> <vector>.
> Below is part of the error message:
> In file included from
> /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/vector.h:32,

^^^^^^
This is your problem. The compiler is too old. g++ versions before 3.x
are not compliant wrt namespace std. They make std a synonym for the
global namespace. If possible, you should upgrade to gcc 3.x.

 
Reply With Quote
 
JKop
Guest
Posts: n/a
 
      06-02-2004
David Harmon posted:

> On Wed, 02 Jun 2004 12:32:50 GMT in comp.lang.c++, JKop <(E-Mail Removed)>
> wrote,
>>namespace ThirdParty {
>>
>> #include <thirdpary> }

>
> You think so, huh? Where is the linker going to find the definition of
> ThirdParty::vector or anything else?



Let's assume that there's:


ThirdParty.hpp
ThirdParty.cpp



In the Source Code file in which you wish to use this library, put:

namespace ThirdParty
{
#include <thirdparty.hpp>
}



And now, for the Source code file... Don't actually add it to your project
to be compiled; instead, do this: Make another file
"ThirdPartySourceCode.cpp", and put the following into it:


namespeace ThirdParty
{

using namespace ThirdParty;

#include <thirdparty.cpp>
}



-JKop
 
Reply With Quote
 
David Harmon
Guest
Posts: n/a
 
      06-02-2004
On Wed, 02 Jun 2004 18:16:05 GMT in comp.lang.c++, JKop <(E-Mail Removed)>
wrote,
>Let's assume that there's:
>
>
>ThirdParty.hpp
>ThirdParty.cpp


No, that's too easy. Instead there is

ThirdParty.hpp
ThirdParty.lib

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
ERROR CS0234: The type or namespace name 'DataAccessHelper' does not exist in the namespace 'BCC' (are you missing an assembly reference?) li.eddie@gmail.com ASP .Net 0 01-06-2006 11:31 AM
[XML Schema] Including a schema document with absent target namespace to a schema with specified target namespace Stanimir Stamenkov XML 3 04-25-2005 09:59 AM
Reaching into the default namespace when using another namespace. Jason Heyes C++ 1 11-19-2004 02:36 AM
Namespace: Is it a scope or a namespace? Anonymous C++ 3 08-18-2003 01:31 PM
Help:Why can't I use namespace System.Web? It is said that this namespace doesn't exist. But it should exist. ASP .Net 1 07-29-2003 04:31 PM



Advertisments