Microsoft KB Archive/98989

= FIX: Constructor C4705 Warning from Aggregate Class Member =

Article ID: 98989

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft C/C++ Professional Development System 7.0
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 1.5 Professional Edition
 * Microsoft Visual C++ 1.51
 * Microsoft Visual C++ 1.52 Professional Edition
 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 2.1

-



This article was previously published under Q98989



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)


 * 1) include 

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(&quot;Object1.MyStruct.i = &quot;); Object2.Print(&quot;Object2.MyStruct.i = &quot;); }

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: kbbug kbfix kbcpponly kbcompiler KB98989

-

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

© Microsoft Corporation. All rights reserved.