错误 C2079 'std::pair<Dummy<int>,Dummy<int>>::first' 使用未定义的类 'Dummy<int>'

Posted

技术标签:

【中文标题】错误 C2079 \'std::pair<Dummy<int>,Dummy<int>>::first\' 使用未定义的类 \'Dummy<int>\'【英文标题】: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;

【问题讨论】:

【参考方案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 中需要这样做很烦人,但它确实有效。谢谢!

以上是关于错误 C2079 'std::pair<Dummy<int>,Dummy<int>>::first' 使用未定义的类 'Dummy<int>'的主要内容,如果未能解决你的问题,请参考以下文章

std::vector<std::pair<int, float>> 和 void 错误

C++ 错误在模板类中声明 std::pair

宏 MOCK_METHOD 传递了 3 个参数,但 std::pair 仅出现 2 个错误

为啥 std::array<std::pair<int,int>, 3> 不能使用嵌套初始化列表初始化,但 std::vector<std::pair<int,in

由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误

STL std::pair基本用法