-1

C++ とアルゴリズムを学び始めたとき。モジュール パラダイムでコードをグループ化したい。そのため、次のように、並べ替え手順を 3 つのファイルに分割しました。

namespace sort
{
    void insertSort(int* a,int size);    
}

sort.cpp

#include "sort.h"
namespace sort
{
}
void sort::insertSort(int* a,int size)
{
    int i,j,key;
    for(j=1;j<size;j++)
    {
        key=a[j];
        i=j-1;
        while(i>=0 && a[i]>key)
        {
            a[i+1]=a[i];
            i=i-1;
        }
        a[i+1]=key;
    }
}

main.cpp

#include<iostream>
#include"sort.h"
int main()
{
    int a[6]={5,2,4,6,1,3};
    sort::insertSort(a,6);
    for(int i=0;i<6;i++) std::cout<<a[i]<<'\t';
    return 0;
}

Dev-C++ を使用して 3 つのファイルをコンパイルした場合。以下のエラー情報を取得しました。

[リンカ エラー] `sort::insertSort(int*, int)' への未定義の参照

どうしてか分かりません。ファイル「sort.h」をインクルードしたと思いますが、コンパイルがメソッドを参照できないと私に言っているのはなぜsort::insertSort()ですか?

4

1 に答える 1

1

プログラム全体をビルドするときは、すべてのオブジェクト ファイルを一緒にリンクしていることを確認してください。で宣言されているが、その定義がプログラム全体に含まれていない関数main()を関数が呼び出しているため、リンカは不平を言っています。sort::insertSortsort.h

特定の Dev-C++ 環境にどのパラメーターが必要かはわかりませんが、通常はcpp、コンパイラーのフロントエンドに送信するコマンド ラインにすべてのファイルが含まれていることを確認してください。

于 2013-02-02T08:51:20.770 に答える