Ошибка: переменная нуждается в кадре стека

учитывая этот код, я поставил bp в конце броска (int n) и у меня были данные в массиве значений
и я положил еще один в конце печати, и в массиве не было данных. Почему я получаю эту ошибку: 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

Решение

Что именно этот:

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>, так далее.

Применяя вышесказанное, ваш код становится:

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

Я бы начал с них, а именно с первых двух предложений.

2

Другие решения

Не признает rand а также srand, добавлять #include <stdlib.h> на ваш die.cpp файл.

1

Отладчик будет отображать эту ошибку, когда выполнение находится в точке, в которой рассматриваемая переменная находится вне области видимости и поэтому не может быть оценена. Шагайте в ваш код, пока не достигнете области действия переменной, и отладчик покажет вам ее значение.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector