簡體   English   中英

在cpp文件中使用來自內聯命名空間的類型在MSVS中不起作用

[英]Using type from inline namespace in cpp file does not work in MSVS

我的庫中有兩個版本的Error結構,所以我想使用內聯命名空間進行版本控制。

#pragma once
#include <string>

namespace core {
    inline namespace v2 {
        struct Error {     // <-- new version
            int code;
            std::string description;
        };
    }
    namespace v1 {
        struct Error {     // <-- old version
            int code;
        };
    }
}

下面的示例演示了我使用Visual Studio 2017收到的編譯錯誤.clang和gcc都可以正常工作。

// foo.h
#pragma once
#include "error.h"

namespace core {
    class Foo
    {
    public:
        Foo() = default;
        ~Foo() = default;
        void someMethod(Error err);
    };
}

// foo.cpp
#include "foo.h"
#include <iostream>

void core::Foo::someMethod(Error err) {  // error C2065: 'Error': undeclared identifier
    std::cout << err.code << std::endl;
}

看起來像MSVS中的錯誤或者我錯過了一些東西。 此代碼在MSVS上沒有任何問題,工作正常:

void core::Foo::someMethod() {    // <-- Error is not passed here
    Error err;
    err.code = 42;
    std::cout << err.code << std::endl;
}

知道為什么我會收到這個錯誤嗎?

VS2017版本15.9已針對此問題提交了一個錯誤,標題為: 未找到內聯命名空間名稱

錯誤報告中建議的解決方法是在函數參數中指定命名空間(例如, void core::Foo::someMethod(core::Error err) )。

關於錯誤報告的最終評論表明他們已經在即將發布的版本中修復了問題。 (未提及發行版)。

暫無
暫無

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

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