如何从静态类函数初始化静态类对象

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" ;

以上是关于如何从静态类函数初始化静态类对象的主要内容,如果未能解决你的问题,请参考以下文章

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

静态代码块构造代码块构造函数以及Java类初始化顺序

c#中对象初始化是啥意思?

C#面向对象

mfc 类静态成员

静态代码块构造代码块构造函数以及Java类初始化顺序