【问题标题】:Error C2079 'std::pair<Dummy<int>,Dummy<int>>::first' uses undefined class 'Dummy<int>'错误 C2079 'std::pair<Dummy<int>,Dummy<int>>::first' 使用未定义的类 'Dummy<int>'
【发布时间】:2019-11-15 06:48:28
【问题描述】:

以下代码 sn-p 在 C++11/14/17 标准下使用 GCC 9.1 和 Clang 6.0 编译得很好,但拒绝使用 Visual Studio 2019 编译。我可以将 getDummies() 的返回更改为 @987654322 @ 和 VS 将使用 C++14/17 标准进行编译,但这会破坏所有编译器对 C++11 的兼容性,我需要保留这一点。

#include <cstdlib>
#include <utility>

template<typename T>
class Dummy
{
public:
    //static auto getDummies() // Works but breaks C++11 compatibility
    static std::pair<Dummy<int>, Dummy<int>> getDummies()
    {
        return std::make_pair(Dummy<int>{}, Dummy<int>{});
    }
};

int main()
{
    auto dummies = Dummy<int>::getDummies(); // Error C2079

    return EXIT_SUCCESS;
}

【问题讨论】:

    标签: c++ visual-studio visual-studio-2019


    【解决方案1】:

    Dummy 类在类内部定义 getDummies() 函数时未完全定义。

    您可以在类中声明函数,然后在类外定义它,例如:

    template<typename T>
    class Dummy
    {
    public:
        static std::pair<Dummy<int>, Dummy<int>> getDummies();
    };
    
    template<typename T>
    std::pair<Dummy<int>, Dummy<int>> Dummy<T>::getDummies()
    {
        return std::make_pair(Dummy<int>{}, Dummy<int>{});
    }
    

    【讨论】:

    • 没定义没关系,OP的定义还是标准的
    • 我觉得在 Visual Studio 中需要这样做很烦人,但它确实有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多