C ++类静态成员

时间:2012-09-07 07:27:43

标签: c++ static static-members unresolved-external

所以我的头文件包含静态成员:

#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 个答案:

答案 0 :(得分:2)

当链接器没有给出编译cpp的结果的obj文件时,通常会发生这种错误。

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

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

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