-1

foo.h

#ifndef FOO_H
#define FOO_H

class Foo
{
    int fooObj1;
    bool fooObj2;
public:
    Foo(int input1);
};

#endif

foo.cpp

#include "foo.h"

Foo::Foo(int input1)
{
    fooObj1 = input1;
    // some code logic to decide the value of fooObj2 (an example)
    // so I can't really do member initialization list.
    fooObj2 = (fooObj1 % 2 == 0);
}

そこで、チュートリアルに従っていたところ、警告をオンにし[-Weffc++]てエラーとして扱うように言われました。しかし、私がそうするときは[-Weffc++]、警告を出してください: 'Foo::fooObj1' should be initialized in the member initialization list [-Weffc++]そして'Foo::fooObj2' should be initialized in the member initialization list [-Weffc++]. しかし、このプロジェクトではメンバーの初期化リストを実際に行うことはできません。では、どうすればこの警告を取り消すことができますか?

4

4 に答える 4

1
    
Foo::Foo(int input1) : fooObj1(input1), fooObj2(0 == input1 % 2) {}
于 2021-10-19T07:56:54.763 に答える
1

警告を取り除くための 2 つの解決策。

解決策 1

たとえばCalculateFooObj2InitialValue、いくつかの静的メソッドを作成し、メンバー初期化リストで使用します。

Foo::Foo(int input1):
  fooObj1(input1),
  fooObj2(CalculateFooObj2InitialValue(input1)) {
  ...  
}

解決策 2

メンバー初期fooObj2化リストのデフォルト値で初期化しますが、あまり意味はありません。そして、後で意味のある初期値を計算して割り当てます。

Foo::Foo(int input1):
  fooObj1(input1),
  fooObj2{} {
  // some code logic to decide the value of fooObj2 (an example)
  // so I can't really do member initialization list.
  fooObj2 = (fooObj1 % 2 == 0);
}
于 2021-10-19T11:41:31.923 に答える