Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Undefined symbol for operator in namespace

982694Jan 4 2013 — edited Jan 7 2013
If I compile the below into an object file and output it symbol table the operator+ is undefined.
namespace U
{
   struct X
   {
      void foo();
   };

   X& operator+( U::X& );

   struct Y
   {
     void bar();
   };
}

using namespace U;

X& operator+( X& x )
{
   return x;
}

void X::foo()
{
}

void Y::bar()
{
   X x;

   x.foo();

   operator+(x);

   return;
}
% nm -CA z.o


z.o:

z.o: [Index]   Value      Size    Type  Bind  Other Shndx   Name

z.o: [2]        |         0|       0|SECT |LOCL |0    |9      |
z.o: [3]        |         0|       0|SECT |LOCL |0    |8      |
z.o: [4]        |         0|       0|OBJT |LOCL |0    |6      |Bbss.bss
z.o: [5]        |         0|       0|OBJT |LOCL |0    |3      |Ddata.data
z.o: [6]        |         0|       0|OBJT |LOCL |0    |5      |Dpicdata.picdata
z.o: [7]        |         0|       0|OBJT |LOCL |0    |4      |Drodata.rodata
z.o: [8]        |         0|       0|FUNC |GLOB |0    |UNDEF  |U::X&U::operator+(U::X&)
                                                       [__1cBU2s6Frn0ABX__2_]
z.o: [11]       |        16|      36|FUNC |GLOB |0    |2      |U::X&operator+(U::X&)
                                                       [__1c2s6FrnBUBX__2_]
z.o: [10]       |        72|      24|FUNC |GLOB |0    |2      |void U::X::foo()
                                                       [__1cBUBXDfoo6M_v_]
z.o: [9]        |       112|      40|FUNC |GLOB |0    |2      |void U::Y::bar()
                                                       [__1cBUBYDbar6M_v_]
z.o: [1]        |         0|       0|FILE |LOCL |0    |ABS    |z.cc
However, if I prefix the operator with the namespace (even though the using namespace is already stated), then it looks ok. Is this a bug?
X& U::operator+( X& x )
{
   return x;
}
% nm -CA z.o


z.o:

z.o: [Index]   Value      Size    Type  Bind  Other Shndx   Name

z.o: [2]        |         0|       0|SECT |LOCL |0    |9      |
z.o: [3]        |         0|       0|SECT |LOCL |0    |8      |
z.o: [4]        |         0|       0|OBJT |LOCL |0    |6      |Bbss.bss
z.o: [5]        |         0|       0|OBJT |LOCL |0    |3      |Ddata.data
z.o: [6]        |         0|       0|OBJT |LOCL |0    |5      |Dpicdata.picdata
z.o: [7]        |         0|       0|OBJT |LOCL |0    |4      |Drodata.rodata
z.o: [10]       |        16|      36|FUNC |GLOB |0    |2      |U::X&U::operator+(U::X&)
                                                       [__1cBU2s6Frn0ABX__2_]
z.o: [9]        |        72|      24|FUNC |GLOB |0    |2      |void U::X::foo()
                                                       [__1cBUBXDfoo6M_v_]
z.o: [8]        |       112|      40|FUNC |GLOB |0    |2      |void U::Y::bar()
                                                       [__1cBUBYDbar6M_v_]
z.o: [1]        |         0|       0|FILE |LOCL |0    |ABS    |z.cc
This post has been answered by Steve.Clamage-Oracle on Jan 7 2013
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Feb 4 2013
Added on Jan 4 2013
3 comments
487 views