2013-08-02 92 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

是的,这将做“文件不再打开”的伎俩。 –

相关问题