【发布时间】:2014-03-06 06:38:40
【问题描述】:
有课:
k.h
class k
{
static int ii;
static void foo();
};
k.cpp
#include "k.h"
void k::foo()
{
ii++;
}
在编译期间我收到以下错误消息:
error LNK2001: unresolved external symbol "private: static int k::ii" (?ii@k@@0HA)
没关系。但是当我在方法中添加inline关键字时,错误消失了:
class k
{
static int ii;
inline static void foo();
};
这不是真实世界的例子,但我不知道这段代码到底发生了什么,可能有人向我解释一下吗?
【问题讨论】:
-
foo在哪里使用?ii在哪里定义?foo定义在哪里? -
@Charles Bailey foo 无处使用,ii 无处定义,foo 在 cpp 文件中定义。但是我已经在下面的答案中得到了解释,这似乎完全正确。 foo 未使用,因此不会生成它的代码。