Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    [SOLVED] Qt5 + VS2010 QDateTime => not enough actual parameters for macro 'min' & 'max'

    General and Desktop
    12
    21
    39574
    Loading More Posts
    • 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.
    • A
      AcerExtensa last edited by

      Hi,
      I'm playing with Qt5 and have successfully compiled it from GIT under Windows 7 + VS 2010. It works(in most cases), but when I include <QDateTime> header it breaks whole compilation with following errors:

      @
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(123): warning C4003: not enough actual parameters for macro 'min'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(124): warning C4003: not enough actual parameters for macro 'min'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(125): warning C4003: not enough actual parameters for macro 'max'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(123): error C2589: '(' : illegal token on right side of '::'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(123): error C2059: syntax error : '::'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(124): error C2589: '(' : illegal token on right side of '::'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(124): error C2059: syntax error : '::'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(125): error C2589: '(' : illegal token on right side of '::'
      1>c:\QT\QT5_X86_GIT\qtbase\include\QtCore/qdatetime.h(125): error C2059: syntax error : '::'
      @

      This lines in datetime.h header make VS go crasy:
      @
      static inline qint64 nullJd() { return std::numeric_limits<qint64>::min(); }
      static inline qint64 minJd() { return std::numeric_limits<qint64>::min() / 2; }
      static inline qint64 maxJd() { return (std::numeric_limits<qint64>::max()) / 2; }
      @

      It happens only if you include <windows.h> in your project. And can be eliminated by defining NOMINMAX before windows.h headers. But it feels somehow broken...

      Does anyone has this problem too?

      God is Real unless explicitly declared as Integer.

      1 Reply Last reply Reply Quote 1
      • N
        nadir last edited by

        Same problem, Qt5 RC2 Visual Studio 2010

        1 Reply Last reply Reply Quote 0
        • A
          AcerExtensa last edited by

          #define NOMINMAX before including windows.h header. This is only way at the moment...

          God is Real unless explicitly declared as Integer.

          N 1 Reply Last reply Reply Quote 1
          • A
            andishock last edited by

            Hello,

            on some projects I get the same warnings and errors, though there is no include of windows.h.
            What else can cause this problem and how can I avoid it.

            Thanks for suggestions.

            Edit: Setting a compiler switch "/DNOMINMAX" fixed the problem.

            1 Reply Last reply Reply Quote 0
            • I
              iphenion last edited by

              Yes, still the same problem here: Qt5.0.2 32bit MSVC2010

              1 Reply Last reply Reply Quote 0
              • D
                djszapi last edited by

                Hitting with 5.1.0 RC2 as well. I am using 32 bit MSVC2010 and the default variant (angel?).

                http://download.qt-project.org/snapshots/qt/5.1/5.1.0-rc2/backups/2013-06-25-65/qt-windows-opensource-5.1.0-rc2-msvc2010-x86-offline-2013-06-25-65.exe

                1 Reply Last reply Reply Quote 0
                • M
                  MaximAlien last edited by

                  Did you try switching to VS2012? I encountered the same problem

                  1 Reply Last reply Reply Quote 0
                  • V
                    Violet Giraffe last edited by

                    You should define NOMINMAX when including <windows.h>. Period. And WIN32_LEAN_AND_MEAN, by the way.

                    1 Reply Last reply Reply Quote 0
                    • D
                      djszapi last edited by

                      @MaximAlien: Nope, the customer was stuck to 2010.

                      @Violet Giraffe: yes, it was mentioned above what to do, so we are aware of that. However, it would be nice to fix centrally in the Qt Project if possible. If not, it would be nice to be aware of the limitation why it is not possible.

                      1 Reply Last reply Reply Quote 0
                      • M
                        MaximAlien last edited by

                        Defining like that:
                        @#define NOMINMAX
                        #include <windows.h>@
                        doesn't help me. Can you help me guys?

                        I have compilation errors in:
                        @static inline qint64 nullJd() { return std::numeric_limits<qint64>::min(); @

                        I have 2 windows.h includes in other classes.

                        1 Reply Last reply Reply Quote 0
                        • D
                          djszapi last edited by

                          MaximAlien: have you tried "/DNOMINMAX"?

                          or DEFINES += NOMINMAX with qmake?

                          1 Reply Last reply Reply Quote 1
                          • M
                            MaximAlien last edited by

                            Thanks for help Laszlo! Defining @DEFINES += NOMINMAX@ in pro file helped me.

                            1 Reply Last reply Reply Quote 0
                            • S
                              sdolard last edited by

                              Use this include "#include <*qt_*windows.h>" instead of #include <windows.h>

                              1 Reply Last reply Reply Quote 0
                              • D
                                djszapi last edited by

                                @sdolard: that will not ultimately help.

                                Also, not sure what you mean by stars in there.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  sdolard last edited by

                                  @Laszlo Papp
                                  Sure, but qt_windows.h already include a define for NOMINMAX, and other stuffs. So it's better to use it.

                                  Chars between * should be bolded.

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    djszapi last edited by

                                    sdolard: the problem is that, it does more than what you need, so not compact enough. :)

                                    More importantly, you need to find and maintain the right place for the include. If you do it in the build system, it always works.

                                    Also, even though qt_windows.h is installed publicly, you could include anytime. However, if you wanna be nice, you would use qt win ifdefs around just in case, but then it is getting uglier. :)

                                    But yes, provided those drawbacks are not real problems, that also works.

                                    1 Reply Last reply Reply Quote 0
                                    • X
                                      XGuy last edited by

                                      [quote author="AcerExtensa" date="1355825116"]#define NOMINMAX before including windows.h header. This is only way at the moment...[/quote]

                                      Hi
                                      i had the same problem and got it working by following your suggestion.
                                      thx.

                                      1 Reply Last reply Reply Quote 0
                                      • F
                                        frankiefrank last edited by

                                        This thread helped me out with this issue. THANK YOU.

                                        "Roads? Where we're going, we don't need roads."

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          DimitriJunker last edited by

                                          Hi,

                                          I have the same problem, but without an include of windows.h. So I can not enter a define before it and including
                                          DEFINES += NOMINMAX
                                          in the pro-file did'nt worked either.
                                          Any more ideas?

                                          1 Reply Last reply Reply Quote 0
                                          • D
                                            DimitriJunker last edited by

                                            Hi,

                                            since I started the project I had to reinstall windows and so qt creator. Originaly i used mingw. Now I also installed mingw, but somehow the installation was not compleat and qt creator used msvc instead. After swiching back to mingw I got rid of the error. So it's solved for me, but others might have the same problem.

                                            Dimitri

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post