2016-06-22 6 views
0

私は警告C26495クラスおよびcppコアのガイドラインで初期化された優先変数?

Point.h 
class Point 
{ 
private: 
    int _x; 
    int _y; 
public: 
    Point(); 
    Point(int x, int y) :_x(x), _y(y) {} 
    ~Point(); 

    void setX(int x) 
    { 
     _x = x; 
    } 
    void setY(int y) 
    { 
     _y = y; 
    } 

    int getX() 
    { 
     return _x; 
    } 
    int getY() 
    { 
     return _y; 
    } 
} 

Point.cpp 
#include "Point.h" 

Point::Point() 
{ 
} 


Point::~Point() 
{ 
} 

)私はこの警告

warning C26495: Variable 'Point::_x' is uninitialized. Always initialize a member variable. (type.6: 

http://go.microsoft.com/fwlink/p/?LinkID=620422を持って使用C++のコアチェッカーnugetを持っているし、私のコードのアナリストを実行します。変数 'ポイント:: _ x' は初期化されていません。私はmake _x = 0.で問題を解決しました。私の修正は正しいですし、ガイドと一致していますか?

+0

はい、正しいです。いいえ、ガイドと一致せず、警告を削除しない可能性があります。 'Point :: Point():_x(0)、_y(0)'はメンバ変数をどのように初期化するかです。 (intの場合は '_x = 0; _y = 0;'と同じですが、他の型の場合はそうでないかもしれません) – immibis

答えて

2

C++ 11標準では、修正は有効な解決策です。

cppreference記事から:

メンバー初期

非静的データ・メンバーは、2つの方法のいずれかで初期化することができる。

1)のメンバー初期化子リストでコンストラクタ。単にブレース、または部材が

struct S 
{ 
    int n = 7; 
    std::string s{'a', 'b', 'c'}; 
    S() // copy-initializes n, list-initializes s 
    { } 
}; 

メンバー初期化子リストで省略された場合に使用されるメンバ宣言に含まイニシャライザに等しいデフォルトメンバ初期化子を介し

struct S 
{ 
    int n; 
    std::string s; 
    S() : n(7) // direct-initializes n, default-initializes s 
    { } 
}; 

2)およびあなたの解決策は、2)で使用された等価イニシャライザを使用します。

関連する問題