Microsoft KB Archive/167356

= FIX: Same Name for Function and Class Causes C2079 =

Article ID: 167356

Article Last Modified on 10/17/2003

-

APPLIES TO


 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition

-



This article was previously published under Q167356



SYMPTOMS
If a single name refers to both a class name and a function name, errors similar to the following may be incorrectly generated:

error C2079: 'g1' uses undefined struct 'g' error C2875: using-declaration causes a multiple declaration of 'A::x' error C2513: 'struct B::x' : decl-specifier is missing a declarator before '='



RESOLUTION
Replace the using declaration with a using directive. For example, in the following code replace the using declarations: using B::f using B::g using B::x with one: using namespace B; Please see the MORE INFORMATION section for a sample that demonstrates the workaround.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem was corrected in Microsoft Visual C++ version 6.0.



MORE INFORMATION
Section 7.3.3, paragraphs 4 thru 15 of the C++ Final Draft International Specification discuss this language behaviour in detail:

If the set of declarations and using-declarations for a single name are given in a declarative region, --they shall all refer to the same, or all refer to functions; or --exactly one declaration shall declare a class name or enumeration name and the other declarations shall all refer to the same entity or all refer to functions; in this case the class name or enumeration name is hidden.

Sample Code
namespace A { int x;   } namespace B { int i;      struct g { }; struct x { }; void f(int); void f(double); void g(char); }   void func  { int i;      void f(char); using B::f; f(3.5f); using B::g; g('a'); struct g g1;    // error C2079 using B::x; using A::x;    // error C2875 x = 99;        // error C2513: struct x x1; }

//Workaround namespace A { int x;   } namespace B { int i;      struct g { }; struct x { }; void f(int); void f(double); void g(char); }

void func { using namespace B ; int i;      void f(char); f(3.5f); g('a'); struct g g1; using A::x; x = 99; struct x x1; }

Keywords: kbbug kbfix kbvc600fix KB167356

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.