0

5 つのファイルがあるとします。fileA.cpp、fileA.hpp、fileB.cpp、fileB.hpp、および main.cpp。どちらのヘッダー ファイルも関数を定義しますvoid help()。main.cpp ファイルの fileA.cpp と fileB.cpp の関数の使用を切り替えたい。ヘッダーインクルードを切り替えてみましたが、ビジュアルスタジオは定義の重複について不平を言っています。

4

1 に答える 1

1

それはリンカーエラーです。fileB.objおよびfileA.obj(および)がmain.objリンクされて、実行可能ファイルが形成されます。fileA.objfileB.objの両方に の定義が含まれるためvoid help()、複数の定義エラーが発生します。の include ディレクティブの変更とは無関係main.cppです。

で囲むvoid help()ことを提案namespace:

ファイル A.hpp :

namespace filea
{
    void help();
}

ファイル A.cpp :

namespace filea
{
    void help()
    {
        // implementation
    }
}

ファイル B.hpp :

namespace fileb
{
    void help();
}

fileB.cpp :

namespace fileb
{
    void help()
    {
        // implementation
    }
}

main.cpp :

#include <fileA.hpp>
using filea::help;

//#include <fileB.hpp>
//using fileb::help;
于 2012-05-23T07:55:35.647 に答える