2013-08-02 90 views
1

我正在做一個入門級的編程課,所以我希望這個問題不是太可怕。到目前爲止,我已經修復了Main函數中的所有問題,但之後我取消了Blob函數調用的註釋,並且出現了一個錯誤,我顯然無法弄清楚。我已經研究過它,並沒有發現任何適合我的問題的事情。LNK2019:無法解析的外部符號...參考函數_main

我相信它有一些與**的東西,我補充說,以解決以前的問題與我的二維數組(這是必需的任務)。我已經在代碼頂部包含了這些意見,以闡明該計劃的目標。

錯誤是:

錯誤LNK2019:解析外部符號 「空隙__cdecl斑點(字符* *,INT,INT)」(BLOB @@ YAXPAPADHH @ Zβ)函數_mainÇ引用: \用戶\勞拉\文件\視覺工作室2010 \項目\ pr9_lt12e \ pr9_lt12e \ p9_lt12e.obj

另外,所述陣列的第一行即輸出偏移10位到左側。列13應該有一個'X',但它顯示爲3.我已經手動更改了數組的值,以便arr [0] [12] ='X'(在數組打印之前),但是位置已經不變。我仍然可以使用該程序,而不會被修復,因爲它只會有幾個關閉點。

我的整個代碼是:

/* 
     SUMMARY 
      This program will read in data from a file and store it in a two-dimensional array. 
      From there it will detect all of the groupings of characters, or "blobs", in the file and count them. 

     INPUT 
      The program will read in information from a file called "blob.txt". 

      BAD DATA CHECKING: 
       N/A 

     OUTPUT 
      The program will output the amount of blobs in the file. 

     DATA STRUCTURES 
      N/A 

     ASSUMPTIONS 
      -The file will have 20 records. Each record will be 70 characters long and the character 
      will be either an X or a blank space/whitespace. 

*/ 

#include <iostream> 
#include <iomanip> 
#include <cmath>  
#include <fstream> 
#include <string> 
using namespace std; 

//GLOBAL CONSTANTS 
const int ONE_D = 22, 
      TWO_D = 72, 
      SEVEN = 7; 

const char X = 'X', 
      B = ' '; 

//FUNCTION PROTOTYPES 
void Blob(char**, int, int); //Retrieves data from the file and places it into the array 


//MAIN FUNCTION 
int main() 
{ 
    //Declare variables 
    ifstream file; 

    string line; 

// char character; 

    int index1 = 0, 
     index2 = 0, 
     col1 = 0, 
     col2 = 0, 
     blobCount = 0; 

    //Declare the 2D array. From course website. 
    char ** arr; 
    arr = new char * [ONE_D]; 
    for (index1 = 0; index1 < ONE_D; index1++) 
     arr[index1] = new char [TWO_D]; 

    //Welcome message 
    cout << "Welcome to the Recursive Blob Finder program!\n\n"; 

    //Open the file 
    file.open("blob.txt"); 

    //Check to see if file has been opened 
    if (file.is_open()) 
     cout << "The file has been opened!\n\n"; 
    else 
     cout << "The file has not been opened!\n\n"; 

    //Read in data from the file and write to the array 
    for (index1 = 0; index1 < 20; index1++) { 
     getline(file, line); 
     strcpy_s(arr[index1], 72, line.c_str()); 
    } 

    ////Row 1 is offset by -10. Adjust first row. 
    //arr[0][2] = B; 
    //arr[0][12] = X; 

    //Clear non-'X' cells 
     for (index1 = 0; index1 < 22; index1++) { 
      for (index2 = 0; index2 < 72; index2++) { 
       if (arr[index1][index2] != X) 
        arr[index1][index2] = B; 
      } 
     } 

    //Print numbered lines 
    for (col1 = 1; col1 < 8; col1++)  
     cout << "   " << col1; 

    cout << endl; 

    for (col2 = 1; col2 < 8; col2++)  
     cout << "1234567890"; 

    cout << endl; //EDIT IS HERE 

    //Print array 
    for (index2 = 0; index2 < 20; index2++) { 

     for (index1 = 0; index1< 70; index1++) 
      cout << arr[index2][index1]; 

     cout << endl; 
    } 

    //Search array for 'X' characters 
    for (index1 = 0; index1 < 20; index1++)  { 

     for (index2 = 0; index2 < 70; index2++) { 

      //When X is found, add 1 to blob count. Blob function will clear out the remaining blob characters 
      if (arr[index1][index2] == X) { 
       blobCount++; 
       Blob(arr, index1, index2); 
      } 
     } 
    } 

    //Close the file 
    file.close(); 

    return 0; 

} 


//OTHER FUNCTIONS 

//Name: Blob 
//Description: Recursive function to find and clear each blob. 
void Blob(char **c[ONE_D][TWO_D], int row, int col) 
{ 
     //Eliminate one blob at a time 

    //Potential positions for 'X' after clearing the last X:   Ox 
    //                xxx 


    if (**c[row][col]==X) { 
     **c[row][col] = B; 

     //Test for X's connected to current blob 
     if (**c[row][col+1]==X) 
      Blob (c, row, col); 

     if (**c[row+1][col-1]==X) 
      Blob (c, row, col); 

     if (**c[row+1][col] == X) 
      Blob (c, row, col); 

     if (**c[row+1][col+1]==X) 
      Blob (c, row, col); 
    } 
} 

有些事情我已經嘗試包括改變原型:

void Blob(char** c[ONE_D][TWO_D], int, int); 

函數調用:

Blob(arr[][], index1, index2); 
Blob(arr[][72], index1, index2); 
Blob(arr[22][72], index1, index2); 

和函數定義的參數:

void Blob(char c[ONE_D][TWO_D], int row, int col) 

回答

3

問題是您正在聲明一個名爲blob(char **, int, int)的函數,然後稍後將該聲明更改爲blob(char **c[ONE_D][TWO_D], int, int)

鑑於您確實將char **arr傳遞給該函數,我建議您刪除[ONE_D][TWO_D]部分,因爲這基本上使得您的函數採用4維數組[或指向指向二維的指針數組,可能]。

您還需要將**c[...][...]更改爲c[...][...]

+0

非常感謝!該程序現在運行。該文件沒有打開(之前),所以我必須弄清楚,但大問題已修復! :) –

+0

該文件發生了什麼事是我做了一個新的程序副本,並忘記將文件放在正確的文件夾中。愚蠢的錯誤。 –

+0

是的,這將做「文件不再打開」的伎倆。 –

相關問題