错误:变量需要堆栈帧

时间:2012-11-21 21:36:46

标签: c++ visual-c++

考虑到这个代码我在roll(int n)的末尾放了一个bp,我在values数组中有数据 我在打印结束时放了另一个,数组中没有数据。为什么我会收到此错误: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();
}

3 个答案:

答案 0 :(得分:2)

这究竟是什么

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

具体来说,您为什么要尝试将cout提取到cout?复制/粘贴可以是一个无情的wench。很确定你想要:

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

接下来,您的标头声明非常复杂。

  • 请勿将using namespace std放入任何标头文件中。有关原因的信息,请参阅this question及其各种讨论。如果您的手指厌倦了键入std::,则有一些替代方案,但一般来说,整个命名空间(特别是像std那样大的命名空间)会导致意想不到的后果。相关问题值得审核。
  • 不要将#include带入标题,除非其中的内容依赖于它(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静态转换为time(NULL)srand(unsigned int seed); API将unsigned int作为种子,而不是int。将您的播种更改为

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

我从那些开始,特别是前两个建议。

答案 1 :(得分:1)

它无法识别randsrand。将#include <stdlib.h>添加到您的die.cpp文件中。

答案 2 :(得分:1)

当执行处于有问题的变量超出范围的点时,调试器将显示此错误,因此无法进行评估。进入代码,直到达到变量的范围,调试器将显示其值。