0

このコードを考慮して、roll(int n)の最後にbpを置き、values配列にデータがあり、印刷の最後に別のbpを置き、配列にデータがありませんでした。なぜこのエラーが発生するのですか:CXX0069 :エラー:変数にはスタックフレームが必要ですか?

die.h

#ifndef DIE_H
#define DIE_H
#include<iostream>
#include<time.h>
using namespace std;


class Die
{
private:
    int number;
    int values[6][2];
    void roll();
public:
    Die();  
    void Roll(int n);
    int getNumber()const{return number;}
    void printLastValue();
    void printApearences();
    ~Die(){}
};

#endif

die.cpp

#include"die.h"
#include<iostream>
#include<time.h>
using namespace std;

Die::Die()
{
    srand(static_cast<int>(time(NULL)));
    number=0;
    for(int j=0;j<6;j++)
    {
        values[j][0]=j+1;
        values[j][1]=0;
    }   
}
void Die::roll()
{
    number=1+rand()%6;
}

void Die::printLastValue()
{
    cout<<number<<endl;
}

void Die::Roll(int n)
{
    for(int j=0;j<6;j++)
    {
        values[j][0]=j+1;
        values[j][1]=0;
    }   
    for(int i=0;i<n;i++)
    {
        roll();
        (values[number-1][1])++;
    }

}
void Die::printApearences()
{
    for(int i=0;i<6;i++)
    {
        cout<<values[i][0]<<" : "<<cout<<values[i][1]<<endl;
    }
}

main.cpp

#include"die.h"
#include<iostream>
using namespace std;

int main()
{
    Die d;
    d.Roll(5);
    d.printApearences();
}
4

3 に答える 3

2

これは正確には何ですか:

cout<<values[i][0]<<" : "<<cout<<values[i][1]<<endl;

具体的には、なぜ抽出しようとしcoutているのcoutですか?コピー/貼り付けは冷酷なウェンチになる可能性があります。あなたが望むことはかなり確かです:

cout << values[i][0] <<" : "<< values[i][1] << endl;

次に、ヘッダー宣言はかなり複雑になります。

  • ヘッダーファイルには入れないusing namespace stdでください。理由については、この質問とそのさまざまな説明を参照してください。指で入力するstd::のにうんざりしている場合は、いくつかの選択肢がありますが、一般に、名前空間全体(特に、同じ大きさの名前空間)を丸呑みすると、std意図しない結果が生じる可能性があります。リンクされた質問はレビューする価値があります。
  • #includeその中のコンテンツがそれに依存していない限り、ヘッダーに'sを入れないでください(たとえば、Die.hはあなたが'しているものを何も必要としません#include
  • ヘッダー自体が満たされない暗黙のインクルードをコーディングしないように、ヘッダーを含めシステムヘッダーの前にヘッダーをリストします。
  • C ++でコンパイルする場合は、標準ライブラリのC ++ヘッダーを含めます(、、、などを使用し<cstdio>ます)<cstdlib><ctime>

上記のコードを適用すると、次のようになります。

Die.h

#ifndef DIE_H
#define DIE_H

class Die
{
private:
    int number;
    int values[6][2];
    void roll();
public:
    Die();  
    void Roll(int n);
    int getNumber()const{return number;}
    void printLastValue();
    void printApearences();
    ~Die(){}
};

#endif

Die.cpp(ファイルの先頭、簡潔にするためにコードを削除)

#include "die.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

main.cpp(ファイルの先頭、簡潔にするためにコードを削除)

#include "die.h"

最後のものにも伝統的に含ま<iostream>れていますが、実際には、記述されているコードでは必要ありません。


ランダムシードが正しくないためint、送信用に静的にキャストされています。APIは、ではなく、をシードとして受け取りtime(NULL)ます。シードを次のように変更しますsrand(unsigned int seed);unsigned intint

srand(static_cast<unsigned int>(time(NULL)));

私はそれら、特に最初の2つの提案から始めます。

于 2012-11-21T23:10:54.787 に答える
1

rand認識しませんsrand。ファイルに追加#include <stdlib.h>しますdie.cpp

于 2012-11-21T21:42:11.670 に答える
1

問題の変数がスコープ外にあるため、評価できない時点で実行が行われると、デバッガーはこのエラーを表示します。変数のスコープに到達するまでコードにステップインすると、デバッガーがその値を表示します。

于 2012-11-21T21:49:25.753 に答える