私は、コンパイラがどのように機能するかについてほとんど、またはまったく知識のない学部生の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;
}
}