2
#include<iostream>
using namespace std;

class sample {
    public:
        static int x;
};

//int sample::x = 20;

int main() {
    sample s1;
    int sample::x = 30;
}

このプログラムをコンパイルすると、修飾名 'sample::x' の無効な使用というエラーが発生しました

このステートメントint sample::x = 30;が原因で、このエラーが発生していることはわかっています。メインで。

しかし、 int sample::x = 30;を定義できない理由がわかりません 。メインで?

4

4 に答える 4

6

標準が言うように:

静的データ メンバーの定義は、メンバーのクラス定義を囲む名前空間スコープに表示されます。

また、静的データ メンバーの定義は、クラスのスコープ内にあります。そう、

int x = 100; //global variable

class StaticMemeberScope
{
   static int x; 
   static int y;
 };

int StaticMemeberScope::x =1;

int StaticMemeberScope::y = x + 1; // y =2 (StaticMemeberScope::x, not ::x)
于 2013-08-01T17:50:51.610 に答える
1

静的メンバーはグローバルオブジェクトのようなもので、経由でのみアクセスできますsample::x

クラスが定義されているグローバルスコープでそれらを初期化する必要があります。

で初期化できません。これmainは構文エラーです。

于 2013-08-01T17:34:35.240 に答える