FIX: Constructor C4705 Warning from Aggregate Class Member

ID: Q98989


The information in this article applies to:
  • Microsoft C/C++ Compiler (CL.EXE), included with:
    • Microsoft C/C++ for MS-DOS, version 7.0
    • Microsoft Visual C++ for Windows, versions 1.0, 1.5, 1.51, 1.52
    • Microsoft Visual C++ 32-bit Edition, versions 1.0, 2.0, 2.1, 2.20


SYMPTOMS

When Microsoft C/C++ compiles an application, it generates the following message for each class constructor:

warning C4705: statement has no effect


CAUSE

The source code has an embedded aggregate member (class, struct, or union) in a class definition and the compiler command line includes the /W4 and /f- compiler options. Note that the /f- option is not supported in the Microsoft Visual C++ 32-bit compiler.


RESOLUTION

The C4705 warning is incorrect and can be safely ignored. If the embedded aggregate is a class, define a default constructor. This will supress the warning.


STATUS

Microsoft has confirmed this to be a bug in the products listed at the beginning of this article. This problem was fixed in Microsoft Visual C++, version 4.0.


MORE INFORMATION

The C4705 warning usually indicates a statement does not affect program execution. Each of the following statements causes this particular warning:


   num - 1270;
   count != 15;
   42; 
The code example below demonstrates a structure data member that generates the C4705 warning for each class constructor. The warning also occurs if the example used a class or a union instead of a structure.

Sample Code


/* Compile options needed: /W4 /f- (Remove /f- for 32-bit compiler)
*/ 

#include <iostream.h>

struct MyStruct_tag { int i; };

class CMyClass {
   private:
      MyStruct_tag MyStruct;
   public:
      inline CMyClass() { MyStruct.i = 0; };
      inline CMyClass(int init) { MyStruct.i = init; };
      void Print(const char *);
};

void CMyClass::Print(const char* string)
{
   cout << string << MyStruct.i << endl;
}

void main(void)
{
   CMyClass Object1;
   CMyClass Object2(1024);

   Object1.Print("Object1.MyStruct.i = ");
   Object2.Print("Object2.MyStruct.i = ");
} 

Additional query words: 7.00 8.00 8.00c 9.00 9.10 1.00 1.50 1.51 2.00 2.10 2.20

Keywords : kbCompiler kbCPPonly kbVC
Version : :1.0,1.5,1.51,1.52,2.0,2.1,2.20
Platform : MS-DOS NT WINDOWS
Issue type :


Last Reviewed: February 2, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.