2012-11-21 62 views
0

考慮到這個代碼,我把一個bp在roll(int n)的末尾,並且我有值數組 中的數據,並且我在打印結束處放了另一個數據, array.Why我得到這個錯誤: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

什麼行?請減少你的代碼。 – djechlin

+0

爲我們提供了線索錯誤點 – pm100

+0

在void Die :: Roll(int n)的末尾,值[6] [2]中有數據。但在無效Die :: printApearences()開始時,值[] [] – laura

回答

2

究竟是

cout<<values[i][0]<<" : "<<cout<<values[i][1]<<endl; 

具體來說,爲什麼你想提取coutcout?複製/粘貼可以是一個無情的丫頭。漂亮的確定要:

cout << values[i][0] <<" : "<< values[i][1] << endl; 

接下來,你的頭聲明相當卷積。

  • 不要將using namespace std放在任何頭文件中。有關原因的信息,請參閱this question及其各種討論。如果你的手指打字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 

模具。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))); 

我開始與那些,特別是前兩個建議。

+0

中沒有數據。「首先列出系統標題,然後是您的。」 - 如果其中一個系統頭文件被頭文件需要但不包含在其中,那麼可以防止編譯器錯誤,所以我推薦您自己的頭文件然後系統頭文件(至少對於與該頭文件最相關的庫或測試翻譯單元)。 –

+2

@TonyD你說得對,我已經扭轉了這個立場(並且會相應地更新他的答案)。 – WhozCraig

+0

您在標頭應使用的名稱空間中保留了std。 – LogicMagic

1

它不承認randsrand。將#include <stdlib.h>添加到您的die.cpp文件中。

1

當執行時所在變量超出範圍時,調試器將顯示此錯誤,因此無法評估。進入你的代碼,直到你到達變量的範圍,調試器會告訴你它的價值。