none
MFC中使用STL问题

    问题

  • 最近用2008写MFC程序过程中使用STL一些类编译出错,开始我认为是我写错了,放到Console Application里一切正常。
    比如:
    void CMyDialog::OnBnClickedButton1()
    {
        double min=std::numeric_limits<double>::max();
        void *p=::operator new(count);
    }

    若在Console中根本没问题。但在MFC中numeric_limits错误提示:
    Error 2 error C2589: '(' : illegal token on right side of '::' 

    operator new错误提示:
    Error 1 error C2665: 'operator new' : none of the 5 overloads could convert all the argument types 

    用其他的STL类如vector目前到没发现有问题。请问这是怎么回事??

    在MFC中使用STL还有哪些要特别注意的地方??

    2009年3月2日 10:14

答案

  • 可以看看http://support.microsoft.com/kb/317799这里的解决方案
    MSMVP VC++
    2009年3月4日 8:21
    版主
  •  除了蒋老师的解决方案之外,我的意见是VC++编译器的查找规则导致的问题。在MFC中的命名空间中已经找到了编译器认为合适的声明,则不继续在更大的或其他的命名空间中查找。
    2009年3月5日 0:41
    版主

全部回复

  •  void CMyDialog::OnBnClickedButton1()  
    {  
        double min=(std::numeric_limits<double>::max)();  
        void *p=::operator new(count);  
    }  
     
    2009年3月3日 5:15
    版主
  • 文件里是不是有#define new DEBUG_NEW?
    MSMVP VC++
    2009年3月3日 21:41
    版主
  • 有啊,是不是它把operator new替换了。

    不过第一个numeric_limits如何解释?
    用了SplendourG加括号的办法确实可以了,就不知道为什么在Console中不用括号一样可以到MFC中必须加括号?
    2009年3月4日 8:11
  • 可以看看http://support.microsoft.com/kb/317799这里的解决方案
    MSMVP VC++
    2009年3月4日 8:21
    版主
  •  除了蒋老师的解决方案之外,我的意见是VC++编译器的查找规则导致的问题。在MFC中的命名空间中已经找到了编译器认为合适的声明,则不继续在更大的或其他的命名空间中查找。
    2009年3月5日 0:41
    版主