-1

したがって、静的メンバーを含むヘッダー ファイルがあります。

#ifndef PROFILE_MANAGER_H
#define PROFILE_MANAGER_H

#include <map>
#include <vector>

using namespace std;
using std::vector;

namespace Engine
{
    class ProfileManager
    {
    private:
        static map<const char*, vector<float>> profiles;
        static map<const char*, vector<float>>::iterator it;
        static pair<map<const char*, vector<float>>::iterator, bool> ret;
    };
}

#endif

そして私のcppファイルには定義があります:

#include "ProfileManager.h"

namespace Engine
{
    map<const char*, vector<float>> ProfileManager::profiles;
    map<const char*, vector<float>>::iterator ProfileManager::it;
    pair<map<const char*, vector<float>>::iterator, bool> ProfileManager::ret;
}

cpp ファイルで静的メンバーを定義したにもかかわらず、リンカは常に静的メンバーが未解決の外部 (LNK2001) であると不平を言います。理由についてのアイデアはありますか?

4

1 に答える 1

2

この種のエラーは通常、cpp のコンパイルの結果である obj ファイルがリンカに与えられていない場合に発生します。

出力ディレクトリで ProfileManager.obj を探します。存在しない場合は、何か問題があります。Luchian Grigore が提案したように、cpp ファイルがコンパイルされていない可能性があります。また、リンカーのパラメーターで obj ファイルが指定されていない可能性もあります。Visual Studio を使用している場合は、cpp ファイルがプロジェクトの一部であることを確認してください。他の環境では、リンカーが呼び出されるコマンドを参照してください。

Visual Studio を使用している場合は、プロジェクトのプロパティ -> リンカー -> コマンド ラインを開き、追加オプションに /VERBOSE を追加します。次に、出力ウィンドウを開き、プロジェクトを再コンパイルします。(コメントありがとう、クレイグ)。

起こりうるもう1つのシナリオ。ヘッダー ファイルを別のプロジェクトにインクルードし、ProfileManager.cpp があったプロジェクトを参照せずにビルドしようとしました。

于 2012-09-07T07:47:35.323 に答える