учитывая этот код, я поставил 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();
}
Что именно этот:
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
например,).<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)));
Я бы начал с них, а именно с первых двух предложений.
Не признает rand
а также srand
, добавлять #include <stdlib.h>
на ваш die.cpp
файл.
Отладчик будет отображать эту ошибку, когда выполнение находится в точке, в которой рассматриваемая переменная находится вне области видимости и поэтому не может быть оценена. Шагайте в ваш код, пока не достигнете области действия переменной, и отладчик покажет вам ее значение.