考虑到这个代码我在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();
}
答案 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
',例如)。<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)
它无法识别rand
和srand
。将#include <stdlib.h>
添加到您的die.cpp
文件中。
答案 2 :(得分:1)
当执行处于有问题的变量超出范围的点时,调试器将显示此错误,因此无法进行评估。进入代码,直到达到变量的范围,调试器将显示其值。