错误 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 错误
宏 MOCK_METHOD 传递了 3 个参数,但 std::pair 仅出现 2 个错误
为啥 std::array<std::pair<int,int>, 3> 不能使用嵌套初始化列表初始化,但 std::vector<std::pair<int,in