【问题标题】: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";

    }

【问题讨论】:

    标签: c++ class static initialization static-methods


    【解决方案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" };
    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2011-11-11
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多