C++ 静态变量和未解决的外部错误
Posted
技术标签:
【中文标题】C++ 静态变量和未解决的外部错误【英文标题】:C++ Static variable and unresolved externals error 【发布时间】:2011-09-22 05:59:03 【问题描述】:我希望我能对类的静态变量有所了解。
例如: 我有两个不同的类,它们执行完全不同的功能,alpha 和 beta。在 alpha 中,我声明了一个 beta 类型的静态变量,所以它看起来像这样:
//alpha.h
#pragma once
#include <iostream>
#include "beta.h"
class alpha
public:
alpha()
static beta var;
void func()
var.setX(3);
void output()
;
//beta.h
#pragma once
#include <iostream>
using namespace std;
class beta
public:
int x;
char y;
beta()
x = 0;
y = ' ';
void setX(int _X)
x = _X;
;
//main.cpp
#include <iostream>
#include <iomanip>
#include "alpha.h"
using namespace std;
int main()
alpha x, y, z;
x.func();
现在当我尝试编译它时,我得到一个未解决的外部错误:
错误 LNK2001:无法解析的外部符号“公共:静态类 beta alpha::var" (?var@alpha@@2Vbeta@@A)
我不确定要更改什么或需要添加什么才能使此类工作正常进行。我希望 x、y 和 z 本质上共享相同的 beta 变量。我想我可以通过将一个 beta 变量通过引用传递给每个变量来完成同样的事情。但是我想知道是否可以在这里使用 static 关键字来做同样的事情,因为类的静态成员在类的任何实例中都具有相同的值。除非我的定义是错误的。
【问题讨论】:
【参考方案1】:类中的静态变量仍然必须在某个地方定义,就像方法一样:
把这个放到main.cpp中:
beta alpha::var;
【讨论】:
如果这看起来是个愚蠢的问题,我很抱歉。这是否考虑使用全局变量? 不,它不是(既不愚蠢也不全球:)。看看这个链接parashift.com/c++-faq-lite/ctors.html#faq-10.12【参考方案2】:将此添加到 main.cpp:
贝塔阿尔法::var;h 文件中的 var 只是类型声明。变量应该在某个源文件中创建。
【讨论】:
以上是关于C++ 静态变量和未解决的外部错误的主要内容,如果未能解决你的问题,请参考以下文章
C++静态成员变量必须在类的定义之外进行声明 (error LNK2001: unresolved external symbol)
C++静态成员变量必须在类的定义之外进行声明 (error LNK2001: unresolved external symbol)
C++静态成员变量必须在类的定义之外进行声明 (error LNK2001: unresolved external symbol)
当我想在 C++ Builder Starter 中链接静态库 TinyXML 2 的发布版本时,为啥会出现未解决的外部错误?