为Visual Studio重构出不完整类型的模板

时间:2018-10-18 18:02:36

标签: c++ visual-studio templates gcc

我为分配的代码编写了一些代码,该代码在gcc中的编译和运行均符合预期,但是在Visual Studio中编译时抛出C2027“未定义类型的使用”。这是导致错误的行为:

template<class Object>
class Foo{

public:
[....]

private: 
[....]

std::stack<Foo> bar;//error c2027 from instantiation with incomplete type
};

我了解为什么会发生错误,我一直在努力找出如何在不大量更改代码结构的情况下解决错误,或者甚至有可能。在这种特殊情况下,该类使用自身的内部数据结构来存储可以回滚到的先前状态的副本。

1 个答案:

答案 0 :(得分:0)

添加间接级别:

ReadProcessMemory

有关代码为何编译的信息,请参见here。总结:只有某些容器允许不完整的类型作为value_type(自C ++ 17起),而其他容器则是未定义的行为(即,无需诊断)。感谢NathanOliver提供的链接!