C++ Visual C++;链接器错误

C++ Visual C++;链接器错误,c++,visual-c++,linker,C++,Visual C++,Linker,我有一个名为MODEL的类,其中公共静态int-theMaxFrames驻留。该类在其自己的头文件中定义。MaxFrames由MODEL类中的一个类和MODEL类中的一个函数void set_up()访问。Render.cpp源文件包含一个函数,该函数调用Direct3D.cpp源文件中的一个函数,而Direct3D.cpp源文件又通过模型对象调用set_up()函数。这是这两个源文件与MaxFrames之间的唯一连接 当我尝试编译代码时,会收到以下错误消息: 1> Direct3D.obj:错

我有一个名为MODEL的类,其中公共静态int-theMaxFrames驻留。该类在其自己的头文件中定义。MaxFrames由MODEL类中的一个类和MODEL类中的一个函数void set_up()访问。Render.cpp源文件包含一个函数,该函数调用Direct3D.cpp源文件中的一个函数,而Direct3D.cpp源文件又通过模型对象调用set_up()函数。这是这两个源文件与MaxFrames之间的唯一连接

当我尝试编译代码时,会收到以下错误消息:

1> Direct3D.obj:错误LNK2001:未解析的外部符号“public:static int MODEL::theMaxFrames”(?)?theMaxFrames@MODEL@@2公顷)

1> Render.obj:错误LNK2001:未解析的外部符号“public:static int MODEL::theMaxFrames”(?theMaxFrames@MODEL@@2公顷)


1> C:\Users\Byron\Documents\Visual Studio 2008\Projects\xFileViewer\Debug\xFileViewer.exe:致命错误LNK1120:1未解析外部

听起来很像您在类中声明了MaxFrames,但您尚未提供定义

如果是这种情况,您需要在.cpp中的某个地方为其提供定义

e、 g


此问题有一个常见问题解答条目:。

谢谢!这就解决了问题。但我不确定为什么这是必要的,你能提供一些急需的见解吗?这是语言要求。如果在类中声明静态变量,则需要在类主体之外的某个位置为其提供定义。因为头文件不包含变量分配。需要出现在可执行文件中的任何内容都需要在某个CPP文件中声明。头文件是不同源文件之间的契约,用于提供内容。源文件是满足头文件中指定的契约的实现。如果您未能满足约定,则会导致链接器错误。@BillyONeal:这不是关于变量分配,而是关于类的
静态
数据成员的有效定义。类定义中的
静态
数据成员的任何声明始终只是一个声明,而不是一个定义,无论该类定义是否在头文件中。您需要在程序的某个翻译单元中定义
静态
数据成员。它位于哪个源文件中并不重要,它可能位于头文件中(尽管如果头文件包含在程序中的多个翻译单元中,这会导致问题)。
int MODEL::theMaxFrames;