0

私は、コンパイラがどのように機能するかについてほとんど、またはまったく知識のない学部生のCS学生であると言って、この前置きをする必要があります。私には、これらのエラーは完全にぎこちないように見えます。ウェブを30分ほど精査した後、私は自分自身を辞任して助けを求めることにしました=(

これが私が受け取っているエラーです:

Prog4Main.obj:エラーLNK2019:未解決の外部シンボル "void __cdecl shellSort(struct SortData * const、int)"(?shellSort @@ YAXQAUSortData @@ H @ Z)が関数_mainで参照されています

* \ Debug \ prog4 again.exe:致命的なエラーLNK1120:1つの未解決の外部

これらは私が得ている唯一の2つのエラーです。

だから、私のプログラムが達成しようとしていることに:

これは私のc++クラスの宿題です。クラスで示した5つの並べ替えアルゴリズムを実装する必要があります。バブルソートと挿入ソートをうまく実装しましたが、シェルソートでこれらのエラーが発生します。それらは同じ.cppファイルにあり、shellSort()関数呼び出しをコメントアウトしてもコンパイルエラーは発生しません。

夏学期のc++クラスが終わりに近づいていて、ソートアルゴリズムを詳しく説明する時間がなかったため、インストラクターからこのプログラムのすべてのコードが提供されました。必要に応じて、変数名を変更し、並べ替え関数の形式を微調整するだけです。このため、私は自分のコードを書かなかったので、すべてのコードが正しいことを知っています。

これはVS2010にあり(エクスプレスではなく、究極だと思います)、私のアプリケーションはwin32コンソールアプリケーションであり、user32.libがリンクされていることを確認して保証しました(他のリンクエラー投稿の1つで言及されています)。この問題を解決する方法が真剣にわかりません。

ここに問題のコードがあります:

//---------------------- Begin Shell Sort -----------------------
    totalTime = 0.0; // Initialize the time variable
    sortError = false; // Initialize the error flag
    // For each of 5 runs on this algorithm
    for(int i=0; i<5; i++)
    {
        // Read the data.  You must do this before each sort
        if(!ReadData(DataArray, NUMRECS))
        {
            cout << "Failed to read data file.\n Program Terminated\n";
            return 0;
        }
        // Start the microsecond timer
        mst->Start();

        shellSort(DataArray, NUMRECS);// Call the sort function here PROBLEM SPOT

        // Stop the microsecond timer
        mst->Stop();
        // Check for error in sorting
        if(!CheckData(DataArray, NUMRECS))
            sortError = true;
        else
            totalTime += mst->getTime(); // Add to the total time for this sort
    }
    // Calculate the average time
    averageTime = totalTime / 5.0;

    // Output the results after checking to be sure the sort worked
    if(sortError)
        cout << "Error in Shell Sort\n\n";
    else
        cout << "Shell sort took " << averageTime << " seconds to complete\n\n";
    //------------------------ End Shell Sort -----------------------------

あなたたちが与えることができるどんな助けも大いに感謝されます。

編集:ここにプロトタイプと関数の定義があります...

    #define NUMRECS 10000

void shellSort(SortData DataArray[NUMRECS], int count); int main{...} //---------------------SHELL SORT------------------------ void ShellSort(SortData DataArray[], int count) { int i, delta; delta = count; do { delta = 1 + delta / 3; for(i=0; i<delta; i++) DeltaInsertionSort(DataArray, i, delta, count); } while(delta > 1); } void DeltaInsertionSort(SortData DataArray[], int I, int Delta, int count) { int j, k; int key; int NotDone; SortData temp; j = I + Delta; while(j < count) { key = DataArray[j].key; /* Get next key to sort */ temp = DataArray[j]; /* Remove and hold */ /* Do insertion sort on this key in the block of delta records */ /* Move each struct where DataArray[j].key > key to the right */ /* by delta spaces and insert the key there. */ insertion(DataArray, key); k = j; NotDone = TRUE; do { if(DataArray[k - Delta].key <= key) NotDone = FALSE; /* Terminate the loop */ else { DataArray[k] = DataArray[k - Delta]; k -= Delta; if(k==I) NotDone = FALSE; } } while(NotDone); /* Insert the moved key */ DataArray[k] = temp; /* Get next key to insert--one full delta increment to the right */ j += Delta; } }

4

1 に答える 1

5

C++ では大文字と小文字が区別されます: shellSortvs ShellSort. 1 つの関数を宣言して呼び出しましたが、まったく関係のない関数を実装しました!

これがコンパイラ エラーではなくリンカ エラーである理由は、前方宣言がコンパイラに「この関数の定義がshellSortどこかにあるだろう」と伝えているが、場所を指定していないためです。この .cpp ファイルには含まれていないため、コンパイラは、後でこの .cpp ファイルと一緒にリンクされる別の .cpp ファイルに含まれている必要があるというあなたの言葉を受け入れます。リンクの段階になると、まだ関数はありませんshellSort

于 2012-08-01T09:18:16.920 に答える