第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

靜態(tài)常量字符串(類成員)

靜態(tài)常量字符串(類成員)

C++
瀟瀟雨雨 2019-09-18 19:30:36
我想為一個類(在這種情況下是一個形狀工廠)有一個私有靜態(tài)常量。我想要有類似的東西。class A {   private:      static const string RECTANGLE = "rectangle";}不幸的是,我從C ++(g ++)編譯器中得到了各種錯誤,例如:ISO C ++禁止成員'RECTANGLE'的初始化非整數(shù)類型'std :: string'的靜態(tài)數(shù)據(jù)成員的無效類初始化錯誤:使'RECTANGLE'靜止這告訴我這種成員設(shè)計不符合標(biāo)準(zhǔn)。如何在不使用#define指令的情況下?lián)碛兴接形淖殖A浚ɑ蛘呖赡苁枪驳模ㄎ蚁氡苊鈹?shù)據(jù)全局性的丑陋?。┤魏螏椭硎举澷p。
查看完整描述

3 回答

?
繁星coding

TA貢獻1797條經(jīng)驗 獲得超4個贊

您必須在類定義之外定義靜態(tài)成員并在那里提供初始化程序。


第一


// In a header file (if it is in a header file in your case)

class A {   

private:      

  static const string RECTANGLE;

};

接著


// In one of the implementation files

const string A::RECTANGLE = "rectangle";

您最初嘗試使用的語法(類定義中的初始化程序)僅允許使用整數(shù)和枚舉類型。


從C ++ 17開始,您有另一個選項,它與您的原始聲明非常相似:內(nèi)聯(lián)變量


// In a header file (if it is in a header file in your case)

class A {   

private:      

  inline static const string RECTANGLE = "rectangle";

};

無需額外定義。


查看完整回答
反對 回復(fù) 2019-09-18
?
素胚勾勒不出你

TA貢獻1827條經(jīng)驗 獲得超9個贊

在類定義中,您只能聲明靜態(tài)成員。它們必須在課堂之外定義。對于編譯時積分常量,標(biāo)準(zhǔn)會使您可以“初始化”成員。但它仍然不是一個定義。例如,如果沒有定義,那么獲取地址是行不通的。


我想提一提,我沒有看到使用的std :: string在為const char []的利益為常數(shù)。std :: string很好,除了它需要動態(tài)初始化。所以,如果你寫的東西像


const std::string foo = "hello";

在命名空間范圍內(nèi),foo的構(gòu)造函數(shù)將在執(zhí)行main啟動之前運行,此構(gòu)造函數(shù)將在堆內(nèi)存中創(chuàng)建常量“hello”的副本。除非你真的需要RECTANGLE成為std :: string,否則你也可以寫


// class definition with incomplete static member could be in a header file

class A {

    static const char RECTANGLE[];

};


// this needs to be placed in a single translation unit only

const char A::RECTANGLE[] = "rectangle";

那里!沒有堆分配,沒有復(fù)制,沒有動態(tài)初始化。


干杯,s。


查看完整回答
反對 回復(fù) 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 738 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號