[vtk-developers] VTK_LEGACY =>invalid redeclaration of nested class and 2952d8f7bce83e318a233048606b14997b4991a1
Brad King
brad.king at kitware.com
Mon Jan 14 11:45:26 EST 2013
On 01/14/2013 10:17 AM, Eric Chamberland wrote:
> Now I have this warning from Intel compiler:
> |
> icpc -o ...
>
> /opt/VTK/include/vtk-5.10/vtkActor.h(158): warning #1170: invalid
> redeclaration of nested class
> VTK_LEGACY(virtual vtkActor *GetNextPart());
> ^
As you discovered the macro was added here:
http://vtk.org/gitweb?p=VTK.git;a=commitdiff;h=29b6e700
but it did not include the nested class declaration. That
was added 7 years ago here:
http://vtk.org/gitweb?p=VTK.git;a=commitdiff;h=1e4cb155
with commit message:
COMP: When VTK_LEGACY_REMOVE is defined then VTK_LEGACY needs to
replace methods with dummy declarations to avoid stray semicolons.
This allows building with Borland when removing legacy code.
It also avoids warnings on some other compilers.
The code added by that commit is still present:
#if defined(VTK_LEGACY_REMOVE)
// Remove legacy methods completely. Put a bogus declaration in
// place to avoid stray semicolons because this is an error for some
// compilers. Using a class forward declaration allows any number
// of repeats in any context without generating unique names.
# define VTK_LEGACY(method) class vtkLegacyMethodRemoved
The comment explains why it works that way.
What was missed, and what is not stated very clearly in the
Intel diagnostic message, is explained by Intel here:
http://software.intel.com/en-us/articles/cdiag1170
"This diagnostic is issued if you redeclare a nested class
with different accessibilities."
So we will see this when more than one method is deprecated AND
they have different access levels (public/protected/private).
Try changing the macro definition to this:
# define VTK_LEGACY(method) VTK_LEGACY__0(method,__LINE__)
# define VTK_LEGACY__0(method,line) VTK_LEGACY__1(method,line)
# define VTK_LEGACY__1(method,line) class vtkLegacyMethodRemoved##line
to add a file-wise unique number to each declaration.
-Brad
More information about the vtk-developers
mailing list