【发布时间】:2021-05-19 08:09:15
【问题描述】:
我们有 A、B 和 C 类,所有这些都需要访问 D 类中的静态变量 staticVariable。
此外,A 类需要有一个 B 类和 C 类的实例,如下所示:
class A{
public:
B instanceB;
C instanceC;
};
D类持有对象类型T的静态变量:
class D{
public:
D() {
staticVariable.init();
};
static T staticVariable;
};
在示例中,类 B 和 C 可以是空的占位符类:
class B{
};
class C{
};
main函数创建一个A的实例:
int main(){
A a;
/*...*/
}
同样,A、B 和 C 类需要访问staticVariable。我尝试了多种方法,包括继承和友元函数,但是我总是遇到我不太理解的依赖问题或链接器错误:
Error LNK2001 unresolved external symbol "public: static class T
D::staticVariable" (?window@D@@2VT@sf@@A) SortingAlgorithms
C:\Users\Dusan\source\repos\SortingAlgorithms\SortingAlgorithms\B.obj
在 A、B 和 C 类的 .obj 文件中报告。
我不确定是否需要main 中的D 实例。
如何实现这个无错误?
对于调用初始化函数的static 对象,您如何做到这一点?
我的意思是,如果该函数与您尝试初始化的对象属于同一类,并且是非静态的,我似乎无法调用staticVariable.init();
【问题讨论】:
-
链接器错误?像这些? stackoverflow.com/questions/5019856/…
-
请展示您失败的尝试之一。目前尚不清楚您正在努力解决什么问题。您可以通过
D::staticVariable访问它。但是,请注意,在您发布的代码中,未定义静态成员。这是否也是您真实代码中的问题,我们只能在您发布 minimal reproducible example 时知道 -
@IWonderWhatThisAPIDoes我澄清了代码,'staticVariable'在D的构造函数中初始化。
-
您添加的行对我的评论没有任何改变。您需要定义静态变量。静态变量未在构造函数中初始化。请发布minimal reproducible example 以及由此产生的错误消息
-
@yomag1234 你不在构造函数中初始化(静态的东西就像全局的,它们没有绑定到一个对象)。你必须在类之外初始化它们(在你的实现文件中,比如
Type Class::Variable = Value;
标签: c++ inheritance static linker dependencies