错误:变量需要堆栈帧

Error: variable needs stack frame

本文关键字:堆栈 变量 错误      更新时间:2023-10-16

考虑到这段代码,我在roll(int n)的末尾放了一个bp,我在值数组中有数据 我在打印结束时放了另一个,数组中没有数据。为什么我会收到此错误:CXX0069:错误:变量需要堆栈帧?

哒��

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

主.cpp

#include"die.h"
#include<iostream>
using namespace std;
int main()
{
Die d;
d.Roll(5);
d.printApearences();
}

到底是什么:

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带入标题中,除非其中的内容依赖于它(例如,Die.h 不需要您#include的任何内容)。
  • 在系统标头之前列出标头(包括在标头),以确保不会编写标头本身无法满足的隐式包含代码。
  • 如果您使用C++编译,请包含标准库C++标头(使用<cstdio><cstdlib><ctime>等。

应用上述代码将变为:

哒��

#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>,但实际上在编写代码时并不需要它。


您被静态强制转换为发送time(NULL)int,因为随机种子不正确。srand(unsigned int seed);API 将unsigned int作为种子,而不是int。将种子设定更改为

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

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

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

当执行在相关变量超出范围时,调试器将显示此错误,因此无法计算。单步执行代码,直到到达变量的范围,调试器将显示其值。