如何从静态类函数初始化静态类对象
Posted
技术标签:
【中文标题】如何从静态类函数初始化静态类对象【英文标题】:How to Initialize a static class object from a static class function 【发布时间】:2019-11-19 11:25:00 【问题描述】:初始化静态成员 TestClassObject 显示错误 LNK2001: unresolved external symbol。
class TestClass
public:
string sClassName;
string sName;
string sDescription;
;
class TestA
private:
static void InitInfo();
static TestClass TestClassObject;
;
void TestA::InitInfo()
TestClassObject.sName = "Name";
TestClassObject.sClassName = "ClassName";
TestClassObject.sDescription = "Description of class";
【问题讨论】:
【参考方案1】:您必须在类定义之外定义静态数据成员。在类定义中,它只被声明而不被定义。
例如
#include <iostream>
#include <string>
using namespace std;
class TestClass
public:
string sClassName;
string sName;
string sDescription;
;
class TestA
private:
static TestClass InitInfo();
static TestClass TestClassObject;
;
TestClass TestA::InitInfo()
return "Name", "ClassName", "Description of class" ;
TestClass TestA::TestClassObject = InitInfo();
int main()
【讨论】:
我是否需要手动调用 InitInfo() 来初始化变量。还是只有我需要调用的是变量TestClassObject? @HariSankarvm 如果为类提供构造函数而不是initInfo
函数,则可以直接创建对象:TestClass TestA::testClassObject("name", "class", "description");
@HariSankarvm 你想通过函数初始化对象。所以你应该提供一个函数调用来初始化对象。
@HariSankarvm 您也可以将返回类型保留为void
,并从main
中调用TestA::initInfo()
。如果您想多次调用它,这将特别有趣,因为您不再需要分配(但它可能会更好地称为reset
...)。
@HariSankarvm 没有这个函数你可以写 TestClass TestA::TestClassObject = "Name", "ClassName", "Description of class" ;以上是关于如何从静态类函数初始化静态类对象的主要内容,如果未能解决你的问题,请参考以下文章