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

链接器总是抱怨静态成员是未解析的外部(LNK2001),即使我已经在 cpp 文件中定义了它们。关于为什么的任何想法?

4

1 回答 1

2

此类错误通常发生在链接器未获得作为 cpp 编译结果的 obj 文件时。

在输出目录中查找 ProfileManager.obj。如果它不存在,则有问题。可能 cpp 文件没有按照 Luchian Grigore 的建议进行编译。也有可能链接器没有在参数中给出 obj 文件。如果您使用的是 Visual Studio,请检查 cpp 文件是否是项目的一部分。在其他环境中,请参阅调用链接器的命令。

如果您使用 Visual Studio,您可以打开项目属性 -> 链接器 -> 命令行并在附加选项中添加 /VERBOSE。然后打开输出窗口并重新编译项目。(谢谢你,克雷格的评论)。

还有一种可能发生的情况。您将头文件包含在另一个项目中,并且您尝试在不引用 ProfileManager.cpp 所在的项目的情况下进行构建。

于 2012-09-07T07:47:35.323 回答