a problem relate to namespace and using

L

Li Daobing

Hello, I want to know whether the following program is legal. the
g++-4.1 can not compile it

$ g++ -c bug2.cpp
bug2.cpp:8: error: expected unqualified-id before '}' token
bug2.cpp:15: error: 'A' is already declared in this scope
bug2.cpp:20: error: prototype for 'void n1::B::foo(const
n1::n2::A&)' does not match any in class 'n1::B'
bug2.cpp:6: error: candidate is: void n1::B::foo(const n1::A&)
$

// begin bug2.cpp
// #include "b.hpp"
namespace n1 {
class A;
class B {
void foo(const A&);
}
}

// #include "a.hpp"
namespace n1 {
namespace n2 {
class A {};
}
using n2::A;
}

// b.cpp
namespace n1 {
void B::foo(const A&) {
return;
}
}
// end
 
T

Tom Widmer

Li said:
Hello, I want to know whether the following program is legal. the
g++-4.1 can not compile it

$ g++ -c bug2.cpp
bug2.cpp:8: error: expected unqualified-id before '}' token
bug2.cpp:15: error: 'A' is already declared in this scope
bug2.cpp:20: error: prototype for 'void n1::B::foo(const
n1::n2::A&)' does not match any in class 'n1::B'
bug2.cpp:6: error: candidate is: void n1::B::foo(const n1::A&)
$

// begin bug2.cpp
// #include "b.hpp"
namespace n1 {
class A;

declaration of n1::A.
class B {
void foo(const A&);
}
}

// #include "a.hpp"
namespace n1 {
namespace n2 {
class A {};
}
using n2::A;

using declaration of n1::A. This clashes with the n1::A declaration
above, since the two declarations refer to different classes (n1::A and
n1::n2::A).

Tom
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top