デフォルトのコンストラクターでarrを宣言するときに、このスコープで「arr」が宣言されていません

ヤティン

私はC ++を初めて使用します。スタックを実装しようとしていますデフォルトのコンストラクターarr内で名前付き変数を宣言してます

しかし、コードをコンパイルすると、次のようなエラーが発生します

'arr' was not declared in this scope

私のコード:

#include<iostream>
using std::cout;
using std::endl;
using std::cin;

class Stack
{

private:
    int top = -1;
    int n = 100;

public:
    Stack()
    {
        int arr[n]; // 100 element stack
    }

    void push(int element)//push element to the top of the stack
    {
        if (isFull() == false)
        {
            // push element
            top += 1; //increment top
            arr[top] = element;
        }
        else cout << "\nStack is full! Can't push element\n";
    }

    void pop()
    {
        if (isEmpty() == false)
        {
            top -= 1;//decrement top
        }
    }

    bool isEmpty()
    {
        if (top == -1)
            return true;
        else
            return false;
    }

    bool isFull()
    {
        if (top == n - 1)
            return true;
        else
            return false;
    }

    int peek(int position)// item at specific location
    {
        if (position > top)
        {
            cout << "\nInvalid position\n";
            return -1;
        }
        else
        {
            return arr[position];
        }
    }

    int count()// number of items
    {
        return top + 1;
    }

    void change(int position, int value) // change item at specific location
    {
        if (position > top)
        {
            cout << "\nInvalid postion\n";
        }
        else
        {
            arr[position] = value;
        }
    }

    void display() // display elements stored
    {
        if (isEmpty() == false)
        {
            cout << endl;
            for (int i = 0; i < top; i++)
            {
                cout << arr[i] << endl;
            }
        }
        else
        {
            cout << endl << "Stack is empty! No elements to display" << endl;
        }
    }
};

int main()
{
    Stack st;

    cout << endl;
    cout << st.isEmpty();

    st.push(10);

    cout << endl;
    cout << st.isEmpty();

    st.display();

    return 0;
}

私のエラー:

stack.cpp: In member function 'void Stack::push(int)':
stack.cpp:28:4: error: 'arr' was not declared in this scope
   28 |    arr[top] = element;
      |    ^~~
stack.cpp: In member function 'int Stack::peek(int)':
stack.cpp:68:11: error: 'arr' was not declared in this scope
   68 |    return arr[position];
      |           ^~~
stack.cpp: In member function 'void Stack::change(int, int)':
stack.cpp:85:4: error: 'arr' was not declared in this scope
   85 |    arr[position] = value;
      |    ^~~
stack.cpp: In member function 'void Stack::display()':
stack.cpp:96:11: error: 'arr' was not declared in this scope
   96 |     cout<<arr[i]<<endl;
      |           ^~~

なぜこれが起こっているのか分かりません。

arrすべてのメンバー関数にアクセスできるべきではありませんか?

JeJo

ザ・

int arr[n]; // 100 element stack 

コンストラクタ(スコープ)内にのみ存在するローカル変数です。他のメンバーはこの配列について知らないので、それがエラーの理由です。

配列宣言をプライベートセクションに移動し、nコンパイル時に認識される必要があります

class Stack
{

private:
   int top = -1;
   static constexpr int n = 100;  // n as static constexpr
   int arr[n]{ 0 };               // move `arr` here and optionally initlize to `0`

public:
   Stack() = default;
   // ... rest of the code

};

補足として、配列操作を行うとき(つまり、pushメンバーの場合と同様)、渡されたに対して境界チェックを行いpositionます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

.uiファイルをQt5C ++にインポートするときに、エラー「このスコープで宣言されていません」

分類Dev

Scalaエラー:X値はYのメンバーではありません->デフォルトコンストラクターで宣言されているにもかかわらず、プロパティが表示されません

分類Dev

クラスのコンストラクターでフィールドを宣言して初期化したときに、フィールドがnullまたはデフォルト値のゼロに初期化されるのはなぜですか?

分類Dev

コンストラクターで「cout」はこのスコープで宣言されていません

分類Dev

宣言と代入が結合されたときにデフォルトのコンストラクターが呼び出されませんか?

分類Dev

クラスにコンストラクターが定義されていない場合でも、C ++のデフォルトのムーブ代入演算子をクラスで呼び出すことはできません

分類Dev

「ベクトル」はこのスコープで宣言されていません

分類Dev

Semaphore.availablePermits()がコンストラクターで宣言されている以上のものを返すことができるのはいつですか?

分類Dev

shapeless.Genericを使用する場合、エラーを回避する方法 'パラメーターが名前で宣言されていない限り、スーパーコンストラクターに自己参照を渡すことはできません'?

分類Dev

Arduinoで関数を宣言するときに「関数はこのスコープで宣言されていません」エラー

分類Dev

シンボルが見つかりません: `javac`コマンドを使用してパブリッククラスjavaに実装されたデフォルトのアクセスインターフェイス(別のsrcファイルで宣言されています)

分類Dev

シンボルが見つかりません: `javac`コマンドを使用してパブリッククラスjavaに実装されたデフォルトのアクセスインターフェイス(別のsrcファイルで宣言されています)

分類Dev

C ++では、デフォルトのコンストラクターを提供しないクラスのインスタンスを個別に宣言してインスタンス化できます(2つのステップで)

分類Dev

Kotlin: 'この型にはコンストラクターがあるため、ここで初期化する必要があります'が、コンストラクターは宣言されていません

分類Dev

エラーC2512:適切なデフォルトコンストラクターが利用できません-プロパティがコンストラクターで初期化されているのはなぜですか?

分類Dev

Outputstreamは抽象クラスなのでインスタンス化できません。なぜ、Outputstreamクラスにデフォルトのコンストラクターが用意されているのですか?

分類Dev

'arrStudがこのスコープで宣言されていません' C ++のエラーを修正する方法

分類Dev

デストラクタが宣言されている場合、なぜこのコードはコンパイルされないのですか?

分類Dev

javascriptクラスコンストラクター内で変数を宣言することと、前述のコンストラクター内で呼び出されるメソッドに対して、意味のあるパフォーマンスの違いはありますか?

分類Dev

変数がデフォルトのコンストラクターで初期化されていません

分類Dev

デフォルトのコンストラクターを常に宣言することの長所と短所は何ですか?

分類Dev

派生クラスを宣言しているときに、基本クラスのコンストラクターが呼び出されます

分類Dev

Ftdilibはインストールされていますが、ftdi_enable_bitbangは「このスコープで宣言されていません」

分類Dev

パブリックに派生した基本クラステンプレートの関数テンプレートの名前を解決する「このスコープで宣言されていません」エラー

分類Dev

「クラスインスタンスオブジェクト」はこのスコープで宣言されていません

分類Dev

Angularコンパイルエラー:NG6001:クラスはNgModule'AppModule 'の宣言にリストされていますが、ディレクティブ、コンポーネント、またはパイプではありません

分類Dev

宣言と同じスコープで名前を使用しているのに、「現在のコンテキストに名前が存在しません」というエラーが表示されるのはなぜですか

分類Dev

デフォルトのコンストラクターを使用せずにPOD構造体が宣言されると、何がインスタンス化されますか?

分類Dev

宣言自体に「スコープ内で宣言されていません」というエラーが表示されるのはなぜですか?

Related 関連記事

  1. 1

    .uiファイルをQt5C ++にインポートするときに、エラー「このスコープで宣言されていません」

  2. 2

    Scalaエラー:X値はYのメンバーではありません->デフォルトコンストラクターで宣言されているにもかかわらず、プロパティが表示されません

  3. 3

    クラスのコンストラクターでフィールドを宣言して初期化したときに、フィールドがnullまたはデフォルト値のゼロに初期化されるのはなぜですか?

  4. 4

    コンストラクターで「cout」はこのスコープで宣言されていません

  5. 5

    宣言と代入が結合されたときにデフォルトのコンストラクターが呼び出されませんか?

  6. 6

    クラスにコンストラクターが定義されていない場合でも、C ++のデフォルトのムーブ代入演算子をクラスで呼び出すことはできません

  7. 7

    「ベクトル」はこのスコープで宣言されていません

  8. 8

    Semaphore.availablePermits()がコンストラクターで宣言されている以上のものを返すことができるのはいつですか?

  9. 9

    shapeless.Genericを使用する場合、エラーを回避する方法 'パラメーターが名前で宣言されていない限り、スーパーコンストラクターに自己参照を渡すことはできません'?

  10. 10

    Arduinoで関数を宣言するときに「関数はこのスコープで宣言されていません」エラー

  11. 11

    シンボルが見つかりません: `javac`コマンドを使用してパブリッククラスjavaに実装されたデフォルトのアクセスインターフェイス(別のsrcファイルで宣言されています)

  12. 12

    シンボルが見つかりません: `javac`コマンドを使用してパブリッククラスjavaに実装されたデフォルトのアクセスインターフェイス(別のsrcファイルで宣言されています)

  13. 13

    C ++では、デフォルトのコンストラクターを提供しないクラスのインスタンスを個別に宣言してインスタンス化できます(2つのステップで)

  14. 14

    Kotlin: 'この型にはコンストラクターがあるため、ここで初期化する必要があります'が、コンストラクターは宣言されていません

  15. 15

    エラーC2512:適切なデフォルトコンストラクターが利用できません-プロパティがコンストラクターで初期化されているのはなぜですか?

  16. 16

    Outputstreamは抽象クラスなのでインスタンス化できません。なぜ、Outputstreamクラスにデフォルトのコンストラクターが用意されているのですか?

  17. 17

    'arrStudがこのスコープで宣言されていません' C ++のエラーを修正する方法

  18. 18

    デストラクタが宣言されている場合、なぜこのコードはコンパイルされないのですか?

  19. 19

    javascriptクラスコンストラクター内で変数を宣言することと、前述のコンストラクター内で呼び出されるメソッドに対して、意味のあるパフォーマンスの違いはありますか?

  20. 20

    変数がデフォルトのコンストラクターで初期化されていません

  21. 21

    デフォルトのコンストラクターを常に宣言することの長所と短所は何ですか?

  22. 22

    派生クラスを宣言しているときに、基本クラスのコンストラクターが呼び出されます

  23. 23

    Ftdilibはインストールされていますが、ftdi_enable_bitbangは「このスコープで宣言されていません」

  24. 24

    パブリックに派生した基本クラステンプレートの関数テンプレートの名前を解決する「このスコープで宣言されていません」エラー

  25. 25

    「クラスインスタンスオブジェクト」はこのスコープで宣言されていません

  26. 26

    Angularコンパイルエラー:NG6001:クラスはNgModule'AppModule 'の宣言にリストされていますが、ディレクティブ、コンポーネント、またはパイプではありません

  27. 27

    宣言と同じスコープで名前を使用しているのに、「現在のコンテキストに名前が存在しません」というエラーが表示されるのはなぜですか

  28. 28

    デフォルトのコンストラクターを使用せずにPOD構造体が宣言されると、何がインスタンス化されますか?

  29. 29

    宣言自体に「スコープ内で宣言されていません」というエラーが表示されるのはなぜですか?

ホットタグ

アーカイブ