Статические члены класса C ++

Итак, у меня есть заголовочный файл со статическими членами:

#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;
}

Компоновщик всегда жалуется на то, что статические члены являются неразрешенными внешними (LNK2001), хотя я определил их в файле cpp. Есть идеи, почему?

-1

Решение

Подобные ошибки обычно случаются, когда компоновщику не дается файл obj, являющийся результатом компиляции cpp.

Ищите ProfileManager.obj в вашей выходной директории. Если его нет, значит что-то не так. Возможно, файл cpp не скомпилирован, как предложил Лучиан Григоре. Также возможно, что компоновщик не получает файл obj в параметрах. Если вы используете visual studio, убедитесь, что файл cpp является частью проекта. В других средах смотрите команду, с которой вызывается компоновщик.

Если вы используете Visual Studio, вы можете открыть свойства проекта -> Линкер -> Командная строка и добавить / VERBOSE в Дополнительный параметр. Затем откройте окно вывода и перекомпилируйте проект. (Спасибо, Крейг за комментарий).

Еще один сценарий, который мог бы случиться. Вы включили файл заголовка в другой проект и попытались создать его без ссылки на проект, в котором находился ProfileManager.cpp.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]