0

考虑到这段代码,我在 roll(int n) 的末尾放了一个 bp,我在 values 数组中有数据,我在 print 的末尾放了另一个,并且数组中没有数据。为什么会出现此错误:CXX0069 : 错误:变量需要堆栈帧?

死.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

死.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;
    }
}

主文件

#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;

具体来说,你为什么要提取coutcout?复制/粘贴可能是个无情的丫头。很确定你想要:

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

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

  • 不要放在using namespace std任何头文件中。有关原因的信息,请参阅此问题及其各种讨论。如果您的手指厌倦了打字std::,还有一些替代方法,但一般来说,吞食整个命名空间(尤其是像 . 一样大的命名空间std)可能会导致意想不到的后果。链接的问题值得回顾。
  • #include除非其中的内容依赖于它,否则不要将' 带入标题中(例如,Die.h不需要您正在输入的任何内容#include)。
  • 在系统标头之前列出您的标头,包括您的标头中,以确保您不会编写您的标头本身不满足的隐式包含。
  • 如果您使用 C++ 进行编译,请包括标准库 C++ 头文件(使用<cstdio><cstdlib><ctime>等)。

应用上面的代码变成:

死.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 将 atime(NULL)作为种子,而不是. 将您的播种更改为srand(unsigned int seed);unsigned intint

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

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

于 2012-11-21T23:10:54.787 回答
1

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

于 2012-11-21T21:42:11.670 回答
1

当执行时所讨论的变量超出范围,因此无法评估时,调试器将显示此错误。进入你的代码,直到你到达变量的范围,调试器会告诉你它的值。

于 2012-11-21T21:49:25.753 回答