请参阅此(简化)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
包含文件?)导致了这一点。