为什么比较map迭代器需要定义它的类?

时间:2015-10-01 09:55:57

标签: c++ iterator visual-studio-2015

请参阅此(简化)C ++代码:

g++    -c -g -MMD -MP -MF "build/Debug/GNU-Linux-x86/main.o.d" -o build/Debug/GNU-Linux-x86/main.o main.cpp

main.cpp:114:36: error: ‘Myclass::operator double(double, double)’ must take ‘void’ operator double (double, double)
                                    ^
main.cpp: In constructor ‘Myclass::My_class(std::complex<double>, double, double, double, double, double, double, int, int, int, int)’:

main.cpp:112:15: error: cannot convert ‘Myclass::g’ from type ‘double (champ_speculaire_class::)(double, double)’ to type ‘double (*)(double, double)’ retval=g;
                 ^

Visual Studio 2010甚至2012年编译就好了。但是当我在Visual Studio 2015中尝试它时,我得到:

1>d:\program files (x86)\microsoft visual studio 14.0\vc\include\utility(198): error C2079: 'std::pair::second' uses undefined class 'c'
1>          with
1>          [
1>              _Kty=int,
1>              _Ty=c
1>          ]

我可以在一定程度上理解这一点,但是......为了比较迭代器(在最后的指针中),为什么必须准确定义#include <map> class c; int main(void) { std::map<int, c>::iterator i; return i == i; }

这个问题是“map with incomplete value type”的副本:我的具体是关于map iterators ,而不是关于允许不完整类型的地图(Visual C ++)版本支持就好!)。 Boost的地图也没有帮助我:给出同样的错误。

我想我所能做的就是使用指针代替迭代器......?

我还有兴趣知道在Visual Studio中哪些更改(class c包含文件?)导致了这一点。

0 个答案:

没有答案