By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,750 Members | 1,221 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,750 IT Pros & Developers. It's quick & easy.

namespace question

P: n/a
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
Jul 22 '05 #1
Share this Question
Share on Google+
10 Replies


P: n/a

"John" <jo*********@yahoo.com> wrote in message
news:c3*************************@posting.google.co 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.
Jul 22 '05 #2

P: n/a
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.

Jul 22 '05 #3

P: n/a
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
Jul 22 '05 #4

P: n/a
jo*********@yahoo.com (John) wrote in message news:<c3*************************@posting.google.c 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

Jul 22 '05 #5

P: n/a
On Wed, 02 Jun 2004 12:32:50 GMT in comp.lang.c++, JKop <NU**@NULL.NULL>
wrote,
namespace ThirdParty
{

#include <thirdpary>
}


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

Jul 22 '05 #6

P: n/a
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 <ra******@t-online.de> wrote in message news:<c9*************@news.t-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.

Jul 22 '05 #7

P: n/a
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.

Jul 22 '05 #8

P: n/a
David Harmon posted:
On Wed, 02 Jun 2004 12:32:50 GMT in comp.lang.c++, JKop <NU**@NULL.NULL>
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
Jul 22 '05 #9

P: n/a
On Wed, 02 Jun 2004 18:16:05 GMT in comp.lang.c++, JKop <NU**@NULL.NULL>
wrote,
Let's assume that there's:
ThirdParty.hpp
ThirdParty.cpp


No, that's too easy. Instead there is

ThirdParty.hpp
ThirdParty.lib

Jul 22 '05 #10

P: n/a
David Harmon posted:
On Wed, 02 Jun 2004 18:16:05 GMT in comp.lang.c++, JKop <NU**@NULL.NULL>
wrote,
Let's assume that there's:
ThirdParty.hpp
ThirdParty.cpp


No, that's too easy. Instead there is

ThirdParty.hpp
ThirdParty.lib

Library files are the devil!
-JKop
Jul 22 '05 #11

This discussion thread is closed

Replies have been disabled for this discussion.