Struct成员初始化

时间:2015-04-16 23:03:37

标签: c++

如何在以下代码中初始化成员变量?

#include <string>
#include <iostream>
using namespace std;
int main()
{
    typedef struct Employee{
        char firstName[56];
        char lastName[56];
    };

    typedef struct Company {
        int id;
        char title[256];
        char summary[2048];
        int numberOfEmployees;
        Employee *employees;
    };

    typedef struct Companies{
        Company *arr;
        int numberOfCompanies;
    };
}

3 个答案:

答案 0 :(得分:1)

你可以添加像这样的构造函数:

struct Employee{
        char firstName[56];
        char lastName[56];

        Employee() //name the function as the struct name, no return value.
        {
           firstName[0] = '\0';
           lastName[0] = '\0';
        }
};

答案 1 :(得分:0)

首先:你以错误的方式使用typedef

typedef struct Employee{
    char firstName[56];
    char lastName[56];
};

你需要typedef的另一个名字

typedef struct _Employee{
        char firstName[56];
        char lastName[56];
    }Employee;

但由于你使用的是c ++,因此不需要使用typedef。

第二:不要在函数内声明结构。将它们声明为

以外的

第三:使用构造函数将成员初始化为默认值,例如:

struct Employee{
   Employee()
   {
       strcpy (firstName, ""); //empty string
       strcpy (lastName, "asdasd"); // some value, every object now by default has this value
   }
        char firstName[56];
        char lastName[56];
    };

第四:使用std :: string class(#include)来更轻松地处理字符串

第五:考虑输入类而不是struct,这两者之间的唯一区别是,默认情况下类将变量声明为private(您可以更改变量urself的可见性),而struct默认将它们声明为public。

答案 2 :(得分:0)

由于您已使用std::string语句中指示的#include,因此您应该按如下方式更改类声明(并在main()函数体之外执行此操作):

struct Employee {
    std::string firstName;
    std::string lastName;
};
typedef struct Company {
    int id;
    std::string title;
    std::string summary;
    int numberOfEmployees;
    Employee *employees;
};
typedef struct Companies{
    Company *arr;
    int numberOfCompanies;
};