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

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

如何在C+中初始化私有靜態(tài)成員?

如何在C+中初始化私有靜態(tài)成員?

C++ C
茅侃侃 2019-06-04 17:24:46
如何在C+中初始化私有靜態(tài)成員?在C+中初始化私有靜態(tài)數(shù)據(jù)成員的最佳方法是什么?我在頭文件中嘗試了這一點,但是它給了我奇怪的鏈接器錯誤:class foo{     private:         static int i;};int foo::i = 0;我猜這是因為我無法從類之外初始化私有成員。那么最好的方法是什么?
查看完整描述

3 回答

?
撒科打諢

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

類聲明應(yīng)該在頭文件中(如果不共享,則在源文件中)。
檔案:foo.h

class foo{
    private:
        static int i;};

但是初始化應(yīng)該在源文件中。
檔案:foo.cpp

int foo::i = 0;

如果初始化在頭文件中,則包含頭文件的每個文件都有靜態(tài)成員的定義。因此,在鏈接階段,您將得到鏈接器錯誤,因為初始化變量的代碼將在多個源文件中定義。

注:MattCurtis:指出如果靜態(tài)成員變量為Constint類型,則C+允許簡化上述內(nèi)容。intboolchar)。然后,可以在頭文件中的類聲明中直接聲明和初始化成員變量:

class foo{
    private:
        static int const i = 42;};


查看完整回答
反對 回復(fù) 2019-06-04
?
絕地無雙

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

為了變量:

foo.h:

class foo{private:
    static int i;};

foo.cpp:

int foo::i = 0;

這是因為只有一個實例foo::i在你的節(jié)目里。它相當于extern int i在頭文件和int i在源文件中。

為了常量您可以將值直接放在類聲明中:

class foo{private:
    static int i;
    const static int a = 42;};


查看完整回答
反對 回復(fù) 2019-06-04
?
回首憶惘然

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

頭文件用于聲明。

頭文件每編譯一次.cpp直接或間接地#includes它們和任何函數(shù)之外的代碼都在程序初始化時運行,在此之前。main().

提出:foo::i = VALUE;進入頭部,foo:i將被分配值VALUE(不管是什么).cpp文件,這些賦值將以不確定的順序(由鏈接器確定)在此之前發(fā)生。main()都跑了。

如果我們#define VALUE成為我們中的一個不同的數(shù)字.cpp檔案?它會編譯得很好,在我們運行程序之前,我們將無法知道哪一個贏了。

不要將已執(zhí)行的代碼放入頭中,原因與您從未執(zhí)行過的原因相同。#include?a?.cpp檔案。

包括護衛(wèi)(我同意你應(yīng)該經(jīng)常使用),保護你不受不同的東西影響:相同的標題是間接的。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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