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

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

對靜態(tài)類成員的未定義引用

對靜態(tài)類成員的未定義引用

C++ C
FFIVE 2019-05-27 16:08:38
對靜態(tài)類成員的未定義引用誰能解釋為什么以下代碼無法編譯?至少在g ++ 4.2.4上。更有趣的是,為什么它會在我將MEMBER轉(zhuǎn)換為int時(shí)進(jìn)行編譯?#include <vector>class Foo {  public:       static const int MEMBER = 1;  };int main(){       vector<int> v;       v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'     v.push_back( (int) Foo::MEMBER ); // OK       return 0;}
查看完整描述

4 回答

?
夢里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果以某種方式需要定義,則C ++標(biāo)準(zhǔn)需要靜態(tài)const成員的定義。

該定義是必需的,例如,如果使用它的地址。 push_back通過const引用獲取其參數(shù),因此編譯器需要您的成員的地址,您需要在命名空間中定義它。

當(dāng)您顯式地轉(zhuǎn)換常量時(shí),您正在創(chuàng)建一個(gè)臨時(shí)的,這是臨時(shí)的,它綁定到引用(在標(biāo)準(zhǔn)中的特殊規(guī)則下)。

這是一個(gè)非常有趣的案例,我認(rèn)為值得提出一個(gè)問題,以便將std更改為對常常成員具有相同的行為!

雖然,以一種奇怪的方式,這可以被視為合法使用一元'+'運(yùn)算符?;旧?,結(jié)果unary +是rvalue,因此rvalues綁定到const引用的規(guī)則適用,我們不使用靜態(tài)const成員的地址:

v.push_back( +Foo::MEMBER );


查看完整回答
反對 回復(fù) 2019-05-27
?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

Aaa.h

class Aaa {protected:

    static Aaa *defaultAaa;};

Aaa.cpp

// You must define an actual variable in your program for the static members of the classesstatic Aaa *Aaa::defaultAaa;


查看完整回答
反對 回復(fù) 2019-05-27
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

您需要在某處(在類定義之后)實(shí)際定義靜態(tài)成員。試試這個(gè):


class Foo { /* ... */ };


const int Foo::MEMBER;


int main() { /* ... */ }

那應(yīng)該擺脫未定義的引用。


查看完整回答
反對 回復(fù) 2019-05-27
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

問題來自于新C ++功能的有趣沖突以及您正在嘗試做的事情。首先,我們來看看push_back簽名:

void push_back(const T&)

它期望引用類型的對象T。在舊的初始化系統(tǒng)下,存在這樣的成員。例如,以下代碼編譯得很好:

#include <vector>class Foo {public:
    static const int MEMBER;};const int Foo::MEMBER = 1; int main(){
    std::vector<int> v;
    v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'
    v.push_back( (int) Foo::MEMBER ); // OK  
    return 0;}

這是因?yàn)槟硞€(gè)實(shí)際對象的某個(gè)值存儲在其中。但是,如果切換到指定靜態(tài)const成員的新方法(如上所述),Foo::MEMBER則不再是對象。這是一個(gè)常數(shù),有點(diǎn)類似于:

#define MEMBER 1

但是沒有預(yù)處理器宏(并且具有類型安全性)的頭痛。這意味著期望參考的向量不能得到一個(gè)。


查看完整回答
反對 回復(fù) 2019-05-27
  • 4 回答
  • 0 關(guān)注
  • 814 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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