2015-10-18 56 views
0

我正在開發一個項目來製作一個單詞爭奪遊戲,目前正在將這些字母放在一個字符串數組中。目前沒有使用任何指針,我擔心這是原因,但我現在很困惑,因爲我的任務需要我使用結構。由於將struct傳遞給函數來編輯數組,導致C++ seg錯誤

任何幫助將不勝感激, 謝謝。

結構定義:

struct puzzle { 
int cols; 
int rows; 
string puzzle[];}; 

loadPuzzle功能

void loadPuzzle(puzzle p){ 
char c; 
p.puzzle[5]; 
for(int i = 0 ; i <p.rows ; i++){ 
    p.puzzle[0] = "      "; 
    for(int j = 0 ; j<p.cols ; j++){ 
     iFS >> c; 
     if(!c=='\0') 
     p.puzzle[i][j]=c; 
    } 
} 
} 

主要功能

int main(int agrc, char* args[]){ 
//setting default file name to make it easier for testing 
string sourceFile = "testfile.txt"; 
puzzle p; 
puzzle *puzz = &p; 
//space left to add another do if need be 
    do{ 
     cout << "please enter scramble name: "; 
     getline(cin, sourceFile); 
     cout << endl; 
     iFS.open(sourceFile.c_str()); 
     if(!iFS.is_open()){ 
     cerr << "Couldnt open file" << endl; 
     } 
    }while(!iFS.is_open()); 
p.cols = getPuzzleCols(); 
p.rows = getPuzzleRows(); 
cout << p.rows << p.cols; 
loadPuzzle(p); 
// displayPuzzle(p); 
} 
+2

此數據成員無效C++:'字符串拼圖[];'。修復這個問題,你的一些問題可能會消失。 – juanchopanza

+0

你的代碼是否可以編譯?由於上面提到的問題,我甚至無法編譯您粘貼的代碼。 –

+0

'p.puzzle [5];'我剛纔說這樣做是否會編譯,但我想它是,它只是試圖讀取'p.puzzle [5]'(不存在)並丟棄結果。 – John3136

回答

0

雖然可以聲明沒有大小

struct puzzle { 
int cols; 
int rows; 
string puzzle[];}; 
陣列

您不能在稍後通過p.puzzle[5];給它一個尺寸。這條線實際上沒有做任何事情。

取而代之的是,沒有大小的陣列允許訪問內存超出結構的結尾,就好像它是一個數組。這對分配數組的聰明/老派方式很有用,但對現代C++不太好。

你應該做的就是學會使用std::vector

開始:

struct puzzle { 
int cols; 
int rows; 
std::vector<string> puzzle;}; 

那麼如何將元素添加到它(如resizepush_back)讀了。

或者如果因爲某種原因你不能這樣做,那麼你需要在它的聲明中給出數組的大小,以便它真的存在。例如:

struct puzzle { 
int cols; 
int rows; 
string puzzle[5];}; 
+0

'string puzzle [];'在C中有效,但不在C++中。 –

+0

我真的不應該把這個難題[5],我在那裏只是爲了測試。我的問題是,我不能使用矢量,我必須允許它與基於輸入文件的不同大小的數組一起工作。我有一個我使用的getPuzzleRows()方法,但它不讓我聲明字符串拼圖[getPuzzleRows()],所以我不知道該怎麼做。 –

+0

@ w.b在這種情況下,您需要了解動態分配的數組,以便您可以執行諸如'string * puzzle = new string [getPuzzleRows()]'' – TheUndeadFish