操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    C++ (匿名)名稱空間、函數和頭文件

    c++

    C++ (匿名)名稱空間、函數和頭文件,c++,,,C++,,,不確定以前是否有人問過這個問題。我四處搜索,找不到我的情景的確切答案,但我可能錯過了問題:我在頭文件中有一個名稱空間,在頭文件中該名稱空間中有一些函數原型: Foo{void ();void (int);}在.cpp文件中,我想在名稱空間中定義函數,同時為它們所依賴的匿名名稱空間的隨機數生成器提供一些保護: Foo{{RNG rando =

    不確定以前是否有人問過這個問題。我四處搜索訪問未命名文件時嘗試越過其結尾,找不到我的情景的確切答案,但我可能錯過了

    問題:我在頭文件中有一個名稱空間,在頭文件中該名稱空間中有一些函數原型:

    namespace Foo{
        void SomeFunc();
        void SomeOtherFunc(int);
    }
    

    在.cpp文件中,我想在名稱空間中定義函數,同時為它們所依賴的匿名名稱空間的隨機數生成器提供一些保護:

    namespace Foo{
        namespace{
            RNG rando = new RNG();
        }
        void SomeFunc(){
            //implementation
        }
        void SomeOtherFunc(){
            //implementation
        }
    }
    

    java解析時已達文件結尾_訪問未命名文件時嘗試越過其結尾_解析時已到達文件結尾

    namespace{
        RNG rando = new RNG();
    }
    void Foo::SomeFunc(){
        //implementation
    }
    void Foo::SomeOtherFunc(int){
        //implementation
    }
    

    我遇到的問題是,無法保證頭文件中的原型與我在cpp文件中定義的函數匹配。命名空間{}代碼塊中的所有內容都可以是新添加到命名空間中的內容

    在上面的代碼示例中,()是在沒有int類型參數的情況下實現的,但其聲明表示它需要一些參數。實際上,似乎我重載了()簽名

    我可以在cpp文件中使用以下內容:

    namespace Foo{
        namespace{
            RNG rando = new RNG();
        }
    }
    void Foo::SomeFunc(){
        //implementation
    

    解析時已到達文件結尾_java解析時已達文件結尾_訪問未命名文件時嘗試越過其結尾

    } void Foo::SomeOtherFunc(int){ //implementation }

    編譯器似乎加強了函數聲明和實現之間的關系,這是我喜歡的。但是這些函數似乎無法訪問匿名名稱空間中的數據

    我是不是遺漏了什么?我能做些什么來解決我覺得在這個實現中存在的問題嗎?我不太熟悉使用(匿名)名稱空間,因此如果這看起來很基本,我很抱歉。

    將未命名的名稱空間移出其他名稱空間:

    namespace Foo{
        namespace{
            RNG rando = new RNG();
        }
        void SomeFunc(){
            //implementation
        }
        void SomeOtherFunc(){
            //implementation
        }
    }
    

    訪問未命名文件時嘗試越過其結尾_java解析時已達文件結尾_解析時已到達文件結尾

    namespace{
        RNG rando = new RNG();
    }
    void Foo::SomeFunc(){
        //implementation
    }
    void Foo::SomeOtherFunc(int){
        //implementation
    }
    

    無論如何都不能在翻譯單元之外訪問它。

    將未命名的命名空間移出其他命名空間:

    namespace Foo{
        namespace{
            RNG rando = new RNG();
        }
        void SomeFunc(){
            //implementation
        }
    

    訪問未命名文件時嘗試越過其結尾_java解析時已達文件結尾_解析時已到達文件結尾

    void SomeOtherFunc(){ //implementation } }

    namespace{
        RNG rando = new RNG();
    }
    void Foo::SomeFunc(){
        //implementation
    }
    void Foo::SomeOtherFunc(int){
        //implementation
    }
    

    無論如何,在翻譯單元之外都無法訪問它。

    匿名名稱空間是一種轉移注意力的方法。您可以忽略它,它實際上是一個實現細節

    是的,您可以從.cpp文件的頭中重載函數。但是,如果您試圖使用該對中未定義的那一半,則會出現鏈接器錯誤。

    匿名名稱空間是個麻煩。您可以忽略它,它實際上是一個實現細節

    是的,您可以從.cpp文件的頭中重載函數。但是,如果您試圖使用該對中未定義的那一半,則會出現鏈接器錯誤。

    據我所知,通常的約定是在.cpp文件的開頭聲明匿名名稱空間。在您的情況下,您的cpp文件應該如下所示

    namespace{
    

    java解析時已達文件結尾_訪問未命名文件時嘗試越過其結尾_解析時已到達文件結尾

    RNG rando = new RNG(); } void Foo::SomeFunc(){ //implementation } void Foo::SomeOtherFunc(int){ //implementation }

    通過這種方式,函數應該可以訪問rando。

    據我所知,通常的約定是在.cpp文件的開頭聲明匿名名稱空間。在您的情況下,您的cpp文件應該如下所示

    namespace{
       RNG rando = new RNG();
    }
    void Foo::SomeFunc(){
        //implementation
    }
    void Foo::SomeOtherFunc(int){
        //implementation
    }
    

    通過這種方式,這些函數應該可以訪問rando。

    太棒了,感謝您的快速響應。我想就是這樣,但昨晚我分心了訪問未命名文件時嘗試越過其結尾,沒有機會檢查。所以我想我會在工作的午休時間問你。太棒了,謝謝你的快速回復。我想就是這樣,但昨晚我分心了,沒有機會檢查。所以我想在我工作的午餐休息時間,我會在這里問一下。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有