Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. ifstream in mfc cause strange errors in debug only [modified]

ifstream in mfc cause strange errors in debug only [modified]

Scheduled Pinned Locked Moved C / C++ / MFC
csharpc++visual-studiodebugginghelp
13 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Maxwell Chen

    The order of #include's may matter. Which do you include first? "stdafx.h" or <fstream> ?


    Maxwell Chen

    F Offline
    F Offline
    FredrickNorge
    wrote on last edited by
    #3

    stdafx.h is before fstream

    1 Reply Last reply
    0
    • M Maxwell Chen

      The order of #include's may matter. Which do you include first? "stdafx.h" or <fstream> ?


      Maxwell Chen

      T Offline
      T Offline
      toxcct
      wrote on last edited by
      #4

      i don't think it is the matter here, otherwise he would have got a "precompiled header"-like error


      TOXCCT >>> GEII power

      [VisualCalc 3.0  updated ][Flags Beginner's Guide  new! ]

      1 Reply Last reply
      0
      • F FredrickNorge

        I use vs2005, when i want to debug my mfc app with #include fstream i get a endless list of problems refering to the xdebug(32)file. A few errors: 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : warning C4229: anachronism used : modifiers on data are ignored 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : error C2365: 'operator new' : redefinition; previous definition was 'function' 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : error C2078: too many initializers 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : error C2440: 'initializing' : cannot convert from 'int' to 'void *' When i do a release however, everything works just fine... any sugestions? - Fred -- modified at 12:26 Tuesday 18th July, 2006

        C Offline
        C Offline
        Cedric Moonen
        wrote on last edited by
        #5

        As the problem is only in debug mode, maybe there is something wrong with some preprocessor definition. If you have a #ifdef _DEBUG statement at the top of your file, post it here (completely) so we can have a look.


        Cédric Moonen Software developer
        Charting control

        F 1 Reply Last reply
        0
        • C Cedric Moonen

          As the problem is only in debug mode, maybe there is something wrong with some preprocessor definition. If you have a #ifdef _DEBUG statement at the top of your file, post it here (completely) so we can have a look.


          Cédric Moonen Software developer
          Charting control

          F Offline
          F Offline
          FredrickNorge
          wrote on last edited by
          #6

          ok, ive tried without the #ifdef _DEBUG #include "stdafx.h" #include "resource.h" #include "Dialog1.h" #include "Dialog2.h" #include "assert.h" #include #include "Dialog3.h" #include #include /* Needed only for _O_RDWR definition */ #include #include #include "EmbeddedDialogDlg.h" #include "QuickMissLoadWriteEdit.h" #include #include "string.h" #include #include using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif code comes here

          C D 2 Replies Last reply
          0
          • F FredrickNorge

            ok, ive tried without the #ifdef _DEBUG #include "stdafx.h" #include "resource.h" #include "Dialog1.h" #include "Dialog2.h" #include "assert.h" #include #include "Dialog3.h" #include #include /* Needed only for _O_RDWR definition */ #include #include #include "EmbeddedDialogDlg.h" #include "QuickMissLoadWriteEdit.h" #include #include "string.h" #include #include using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif code comes here

            C Offline
            C Offline
            Cedric Moonen
            wrote on last edited by
            #7

            Mmmh, I don't see really the problem here. Anyway, you are mixing deprecated header files with new ones. Remove all the include with a .h for the stadard library (stdio,io,string). I don't think this will solve the problem but check that first.


            Cédric Moonen Software developer
            Charting control

            F 1 Reply Last reply
            0
            • C Cedric Moonen

              Mmmh, I don't see really the problem here. Anyway, you are mixing deprecated header files with new ones. Remove all the include with a .h for the stadard library (stdio,io,string). I don't think this will solve the problem but check that first.


              Cédric Moonen Software developer
              Charting control

              F Offline
              F Offline
              FredrickNorge
              wrote on last edited by
              #8

              ok, thanks anyway :)

              1 Reply Last reply
              0
              • F FredrickNorge

                I use vs2005, when i want to debug my mfc app with #include fstream i get a endless list of problems refering to the xdebug(32)file. A few errors: 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : warning C4229: anachronism used : modifiers on data are ignored 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : error C2365: 'operator new' : redefinition; previous definition was 'function' 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : error C2078: too many initializers 1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32) : error C2440: 'initializing' : cannot convert from 'int' to 'void *' When i do a release however, everything works just fine... any sugestions? - Fred -- modified at 12:26 Tuesday 18th July, 2006

                M Offline
                M Offline
                Maxwell Chen
                wrote on last edited by
                #9

                FredrickNorge wrote:

                vs2005, when i want to debug my mfc app with #include fstream

                FredrickNorge wrote:

                1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32)

                Generally speaking, in a MFC/VS2005 project of Debug configuration, the version of operator new being invoked is: "afxmem.cpp" line 59,

                void* __cdecl operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
                {
                return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
                }

                And then "afxmem.cpp" line 393,

                void* __cdecl operator new(size_t nSize, int nType, LPCSTR lpszFileName, int nLine)
                {
                #ifdef _AFX_NO_DEBUG_CRT
                UNUSED_ALWAYS(nType);
                UNUSED_ALWAYS(lpszFileName);
                UNUSED_ALWAYS(nLine);
                return ::operator new(nSize);
                #else
                void* pResult;
                #ifdef _AFXDLL
                _PNH pfnNewHandler = _pfnUninitialized;
                #endif
                for (;;)
                {
                pResult = _malloc_dbg(nSize, nType, lpszFileName, nLine);
                if (pResult != NULL)
                return pResult;

                #ifdef _AFXDLL
                if (pfnNewHandler == _pfnUninitialized)
                {
                AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();
                pfnNewHandler = pState->m_pfnNewHandler;
                }
                if (pfnNewHandler == NULL || (*pfnNewHandler)(nSize) == 0)
                break;
                #else
                if (_afxNewHandler == NULL || (*_afxNewHandler)(nSize) == 0)
                break;
                #endif
                }
                return pResult;
                #endif
                }


                Maxwell Chen -- modified at 14:01 Tuesday 18th July, 2006

                F 1 Reply Last reply
                0
                • M Maxwell Chen

                  FredrickNorge wrote:

                  vs2005, when i want to debug my mfc app with #include fstream

                  FredrickNorge wrote:

                  1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug(32)

                  Generally speaking, in a MFC/VS2005 project of Debug configuration, the version of operator new being invoked is: "afxmem.cpp" line 59,

                  void* __cdecl operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
                  {
                  return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
                  }

                  And then "afxmem.cpp" line 393,

                  void* __cdecl operator new(size_t nSize, int nType, LPCSTR lpszFileName, int nLine)
                  {
                  #ifdef _AFX_NO_DEBUG_CRT
                  UNUSED_ALWAYS(nType);
                  UNUSED_ALWAYS(lpszFileName);
                  UNUSED_ALWAYS(nLine);
                  return ::operator new(nSize);
                  #else
                  void* pResult;
                  #ifdef _AFXDLL
                  _PNH pfnNewHandler = _pfnUninitialized;
                  #endif
                  for (;;)
                  {
                  pResult = _malloc_dbg(nSize, nType, lpszFileName, nLine);
                  if (pResult != NULL)
                  return pResult;

                  #ifdef _AFXDLL
                  if (pfnNewHandler == _pfnUninitialized)
                  {
                  AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();
                  pfnNewHandler = pState->m_pfnNewHandler;
                  }
                  if (pfnNewHandler == NULL || (*pfnNewHandler)(nSize) == 0)
                  break;
                  #else
                  if (_afxNewHandler == NULL || (*_afxNewHandler)(nSize) == 0)
                  break;
                  #endif
                  }
                  return pResult;
                  #endif
                  }


                  Maxwell Chen -- modified at 14:01 Tuesday 18th July, 2006

                  F Offline
                  F Offline
                  FredrickNorge
                  wrote on last edited by
                  #10

                  ok i tried to overide the calls, no luck :( . What ive done for now though, is commented the verry brief code that actualy use fstream when i debug, and uncomment it for the final release. Works ok for now...

                  M 1 Reply Last reply
                  0
                  • F FredrickNorge

                    ok i tried to overide the calls, no luck :( . What ive done for now though, is commented the verry brief code that actualy use fstream when i debug, and uncomment it for the final release. Works ok for now...

                    M Offline
                    M Offline
                    Maxwell Chen
                    wrote on last edited by
                    #11

                    For this kind of problem, sometimes looking at the compilation log message may help. For example when you have such compilation output message as below:

                    Compiling ...
                    stdafx.cpp
                    test1.cpp
                    test2.cpp
                    test3.cpp
                    e:\wrkshp\test3.cpp(102) : error Cxxxx: blah blah blah
                    test4.cpp
                    test5.cpp
                    Test - 1 error(s), 0 warning(s)

                    Then you may try to back trace those existing definitions by looking at the included headers (and the related compilation units) in the last compilation (eg: test3.cpp) unit wherein errors are found.


                    Maxwell Chen

                    F 1 Reply Last reply
                    0
                    • F FredrickNorge

                      ok, ive tried without the #ifdef _DEBUG #include "stdafx.h" #include "resource.h" #include "Dialog1.h" #include "Dialog2.h" #include "assert.h" #include #include "Dialog3.h" #include #include /* Needed only for _O_RDWR definition */ #include #include #include "EmbeddedDialogDlg.h" #include "QuickMissLoadWriteEdit.h" #include #include "string.h" #include #include using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif code comes here

                      D Offline
                      D Offline
                      David Crow
                      wrote on last edited by
                      #12

                      FredrickNorge wrote:

                      #include <assert.h> #include <Windows.h> #include <io.h> #include <fcntl.h> /* Needed only for _O_RDWR definition */ #include <share.h> #include <stdio.h> #include <iostream> #include <string.h> #include <string> #include <fstream>

                      Why don't you have these in the stdafx.h file?


                      "Money talks. When my money starts to talk, I get a bill to shut it up." - Frank

                      "Judge not by the eye but by the heart." - Native American Proverb

                      1 Reply Last reply
                      0
                      • M Maxwell Chen

                        For this kind of problem, sometimes looking at the compilation log message may help. For example when you have such compilation output message as below:

                        Compiling ...
                        stdafx.cpp
                        test1.cpp
                        test2.cpp
                        test3.cpp
                        e:\wrkshp\test3.cpp(102) : error Cxxxx: blah blah blah
                        test4.cpp
                        test5.cpp
                        Test - 1 error(s), 0 warning(s)

                        Then you may try to back trace those existing definitions by looking at the included headers (and the related compilation units) in the last compilation (eg: test3.cpp) unit wherein errors are found.


                        Maxwell Chen

                        F Offline
                        F Offline
                        FredrickNorge
                        wrote on last edited by
                        #13

                        will do, thanks for all the inputt Maxwell Chen ;)

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups