所以我的头文件包含静态成员:
#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文件中定义它们。关于为什么的任何想法?
答案 0 :(得分:2)
当链接器没有给出编译cpp的结果的obj文件时,通常会发生这种错误。
在输出目录中查找ProfileManager.obj。如果它不存在,那就有问题了。可能没有像Luchian Grigore所建议的那样编译cpp文件。链接器也可能没有在参数中给出obj文件。如果您使用的是visual studio,请检查cpp文件是否是项目的一部分。在其他环境中,请参阅使用调用链接器的命令。
如果使用Visual Studio,则可以打开项目属性 - &gt;链接器 - &gt;命令行并在附加选项中添加/ VERBOSE。然后打开输出窗口并重新编译项目。 (谢谢Craig的评论)。
可能发生的另一种情况。您将头文件包含在另一个项目中,并尝试在不引用ProfileManager.cpp所在的项目的情况下构建。