why does this fail?

Started by
3 comments, last by swiftcoder 15 years, 5 months ago
I have included SFML into my project, when compiling I get an error. The file looks like legal C++ but it still fails. Why? Is there a compiler flag I need to set or something? EDIT: I'm using G++ in linux, it works in MinGW/MSYS

g++ -o src/main.o -c -Isrc -Isrc/libs/include -Isrc/libs/include/bullet src/main.cpp
In file included from src/libs/include/SFML/Window/Window.hpp:37,
                 from src/libs/include/SFML/Window.hpp:36,
                 from src/main.cpp:2:
src/libs/include/SFML/Window/WindowStyle.hpp:39: error: expected identifier before numeric constant
src/libs/include/SFML/Window/WindowStyle.hpp:39: error: expected `}' before numeric constant
src/libs/include/SFML/Window/WindowStyle.hpp:39: error: expected unqualified-id before numeric constant
src/libs/include/SFML/Window/WindowStyle.hpp:48: error: expected declaration before '}' token
scons: *** [src/main.o] Error 1


here is the source.

////////////////////////////////////////////////////////////

//

// SFML - Simple and Fast Multimedia Library

// Copyright (C) 2007-2008 Laurent Gomila (laurent.gom@gmail.com)

//

// This software is provided 'as-is', without any express or implied warranty.

// In no event will the authors be held liable for any damages arising from the use of this software.

//

// Permission is granted to anyone to use this software for any purpose,

// including commercial applications, and to alter it and redistribute it freely,

// subject to the following restrictions:

//

// 1. The origin of this software must not be misrepresented;

//    you must not claim that you wrote the original software.

//    If you use this software in a product, an acknowledgment

//    in the product documentation would be appreciated but is not required.

//

// 2. Altered source versions must be plainly marked as such,

//    and must not be misrepresented as being the original software.

//

// 3. This notice may not be removed or altered from any source distribution.

//

////////////////////////////////////////////////////////////



#ifndef SFML_WINDOWSTYLE_HPP

#define SFML_WINDOWSTYLE_HPP





namespace sf

{



////////////////////////////////////////////////////////////

/// Enumeration of window creation styles

////////////////////////////////////////////////////////////

namespace Style

{

    enum

    {

        None       = 0,      ///< No border / title bar (this flag and all others are mutually exclusive)

        Titlebar   = 1 << 0, ///< Title bar + fixed border

        Resize     = 1 << 1, ///< Titlebar + resizable border + maximize button

        Close      = 1 << 2, ///< Titlebar + close button

        Fullscreen = 1 << 3  ///< Fullscreen mode (this flag and all others are mutually exclusive)

    };

}





} // namespace sf





#endif // SFML_WINDOWSTYLE_HPP



[Edited by - JPulham on November 2, 2008 8:57:43 AM]
pushpork
Advertisement
I'm not sure if the anonymous enum is kosher? Try naming it.

It's also possible that whatever was #included before Window/Windowstyle.hpp isn't legal, and the compiler just fails to get nice and properly confused until this point.
I found the problem, 'None' is typedefed earlier(probably in Xlib or something), so it is being replaced with 0L in the preprocessor stage, this is the code from g++ with the '-e' flag (preprocess only):
# 29 "src/libs/include/SFML/Window/WindowStyle.hpp"namespace sf{namespace Style{    enum    {        0L = 0,        Titlebar = 1 << 0,        Resize = 1 << 1,        Close = 1 << 2,        Fullscreen = 1 << 3    };}}

Maybe I can fiddle with the #include order in main.cpp
pushpork
This is why I would normally name the values in the enum something like style_NONE, style_TITLEBAR, etc.

EDIT: I meant for the identifiers to be all capitals, but the stupid forum insists on changing the case of `style'.
Quote:Original post by JPulham
I found the problem, 'None' is typedefed earlier(probably in Xlib or something), so it is being replaced with 0L in the preprocessor stage
None is a really, really, incredibly unpleasant symbol to be macro'ed. Can you figure out where is is defined? I could possibly see it as a global constant, but still, it doesn't sound like something you would expect a library implementor to do.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

This topic is closed to new replies.

Advertisement