错误:变量需要堆栈帧
Error: variable needs stack frame
考虑到这段代码,我在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)));
我会从这些开始,特别是前两个建议。
它无法识别rand
和srand
。将#include <stdlib.h>
添加到die.cpp
文件。
当执行在相关变量超出范围时,调试器将显示此错误,因此无法计算。单步执行代码,直到到达变量的范围,调试器将显示其值。
相关文章:
- 堆栈变量超出范围时是否解除分配?
- 堆栈变量和函数C++奇怪的行为
- 野牛堆栈变量中的值分配
- 局部堆栈变量成员的返回值优化
- 访问其他线程堆栈变量如何在C++中工作?
- 指向堆栈变量的指针是否易失
- 是否可以 std::move 局部堆栈变量?
- 返回堆栈变量时停止调用析构函数
- 优化易失性堆栈变量的存储/构造是否合法
- SEGFAULT正在写入堆栈变量
- 汇编:C++堆栈变量地址不同/错误?
- C++11 Lambda闭包通过引用涉及一个堆栈变量,该变量离开作用域是允许的,但得到了未定义的行为
- 返回堆栈变量
- Visual Studio 在引用堆栈变量时不使用 EBP
- 堆栈变量或函数声明
- 访问堆栈变量的速度比取消引用指针慢
- 静态变量与堆栈变量:线程安全与堆栈大小
- 堆栈变量生存期好奇的例子
- 如何查找未初始化的堆栈变量
- 如何为堆栈变量分配内存