有类:
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();
};
这不是现实世界的示例,但是我不知道该代码到底发生了什么,可能有人向我解释?
此代码:
#include <iostream>
using namespace std;
struct k
{
static int ii;
static void foo();
};
void k::foo() {
ii=0;
}
int main() {
// your code goes here
return 0;
}
给出链接错误,因为编译器函数k :: foo是输出的,并且它引用了k :: ii。
此代码:
#include <iostream>
using namespace std;
struct k
{
static int ii;
inline static void foo();
};
inline void k::foo() {
ii=0;
}
int main() {
// your code goes here
return 0;
}
没有给出链接错误,因为函数k :: foo被声明为内联,并且不会从任何地方调用,因此编译器实际上从未为此生成任何代码。
如果您在MAIN或其他任何地方添加了呼叫,则将获得链接错误。