簡體   English   中英

為什么結構初始化不能與 char 數組一起使用?

[英]Why can't structure initialization work with array of char?

使用花括號初始化結構時,它似乎不適用於字符數組。 我可以編寫一個在下面工作的等效構造函數。 是否有任何語法,所以我不必編寫構造函數?

#include <cstdint>
#include <cstring>
using namespace std;

struct NamedLocationData {
  uint16_t offset;
  char stateName[21];
  float lat;
  float lon;
  uint32_t population;

    NamedLocationData(uint16_t offset, const char stateName[21],
                                        float lat, float lon, uint32_t population)
        :   offset(offset), lat(lat), lon(lon), population(population) {
        strncpy(this->stateName, stateName, 21);
    }

};

int main() {
    uint16_t nameOffset = 0;
    char stateName[21] = "New York";
    float lat = 40;
    float lon = -74;
    uint32_t population = 8000000;

    #if 0
    NamedLocationData temp = NamedLocationData
        {
         nameOffset, stateName, lat, lon, population
        };
    #endif
    
    NamedLocationData temp( nameOffset, stateName, lat, lon, population);
        
}

默認構造函數是特殊的成員函數之一。 如果 class 中沒有聲明構造函數,則編譯器提供隱式內聯默認構造函數

我建議您將char[]更改為string ,以便stateName能夠獲取值。

#include <cstdint>
#include <cstring>
#include <string>
using namespace std;
struct NamedLocationData {
    uint16_t offset;
    string stateName;
    float lat;
    float lon;
    uint32_t population;

    NamedLocationData(uint16_t offset, string stateName,
        float lat, float lon, uint32_t population)
        : offset(offset), lat(lat), lon(lon), population(population) ,
        stateName(stateName){}


};

int main() {
    uint16_t nameOffset = 0;
    string stateName = "New York";
    float lat = 40;
    float lon = -74;
    uint32_t population = 8000000;

#if 0
    NamedLocationData temp = NamedLocationData
    {
     nameOffset, stateName, lat, lon, population
    };
#endif
    NamedLocationData temp(nameOffset, stateName, lat, lon, population);

    return 0;
}

結果:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM