2015-04-16 554 views
-3

如何在下面的代碼中初始化成員變量?Struct成員初始化

#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; 
    }; 
} 
+0

如果不是C結構,你可以添加一個構造函數 – SHR

+0

使用ctor並去除'typedef's - 它們對你沒有任何好處。在'main'裏定義一個'struct'也很不尋常。哦,你通常需要'std:string'而不是'char foo [xxx];'。 –

+0

這是一個更大的項目的一部分(我在一個類中有它)。我也將改變字符串。 – Fotis455

回答

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'; 
     } 
}; 
0

第一:U以錯誤的方式

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

你需要的typedef

typedef struct _Employee{ 
     char firstName[56]; 
     char lastName[56]; 
    }Employee; 
其他名稱中使用的typedef

但由於你使用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類(#包括),方便的字符串處理

第五:考慮類型類,而不是結構,這兩者之間的唯一區別是,該類默認情況下將變量聲明爲私有變量(您可以更改變量的可見性),而struct在默認情況下將其聲明爲公共。

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; 
}; 
+0

正如我之前所說,我會改變它。它也是一個更大的項目的一部分,我沒有它main.For現在,我想要的是幫助我初始化這些變量。 – Fotis455