Recently I got myself the OpenGL SuperBible 5th edition. All happy I started reading and when I got to the first section on how to set up everything properly I ran in to some problems that both Google and other StackOverflow questions were unable to answer.
I'd like to make clear that I use Visual Studio 2010 and that everything is linked correctly.
I've downloaded the libs and headers from the official OpenGL Superbible website.
So when I write the first program called Triangle.cpp and try to compile it, it gives the following errors.
1>------ Build started: Project: OpenGL, Configuration: Debug Win32 ------
1>Build started 7/19/2011 9:21:27 PM.
1>InitializeBuildStatus:
1> Touching "Debug\OpenGL.unsuccessfulbuild".
1>ClCompile:
1> Triangle.cpp
1>c:\sb5\src\gltools\include\glbatch.h(77): error C2061: syntax error : identifier 'GLenum'
1>c:\sb5\src\gltools\include\glbatch.h(86): error C2061: syntax error : identifier 'GLuint'
1>c:\sb5\src\gltools\include\glbatch.h(89): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\glbatch.h(90): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\glbatch.h(91): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\glbatch.h(92): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\glbatch.h(100): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\glbatch.h(103): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\glbatch.h(106): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\glbatch.h(109): error C2061: syntax error : identifier 'GLuint'
1>c:\sb5\src\gltools\include\glbatch.h(110): error C2061: syntax error : identifier 'GLuint'
1>c:\sb5\src\gltools\include\glbatch.h(113): error C2146: syntax error : missing ';' before identifier 'primitiveType'
1>c:\sb5\src\gltools\include\glbatch.h(113): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(113): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(115): error C2146: syntax error : missing ';' before identifier 'uiVertexArray'
1>c:\sb5\src\gltools\include\glbatch.h(115): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(115): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(116): error C2146: syntax error : missing ';' before identifier 'uiNormalArray'
1>c:\sb5\src\gltools\include\glbatch.h(116): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(116): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(117): error C2146: syntax error : missing ';' before identifier 'uiColorArray'
1>c:\sb5\src\gltools\include\glbatch.h(117): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(117): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(118): error C2143: syntax error : missing ';' before '*'
1>c:\sb5\src\gltools\include\glbatch.h(118): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(118): error C4430: missing type specifier - int assumed. Note开发者_如何学Python: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(119): error C2146: syntax error : missing ';' before identifier 'vertexArrayObject'
1>c:\sb5\src\gltools\include\glbatch.h(119): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(119): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(121): error C2146: syntax error : missing ';' before identifier 'nVertsBuilding'
1>c:\sb5\src\gltools\include\glbatch.h(121): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(121): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(122): error C2146: syntax error : missing ';' before identifier 'nNumVerts'
1>c:\sb5\src\gltools\include\glbatch.h(122): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(122): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(123): error C2146: syntax error : missing ';' before identifier 'nNumTextureUnits'
1>c:\sb5\src\gltools\include\glbatch.h(123): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(123): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glbatch.h(89): error C2065: 'vVerts' : undeclared identifier
1>c:\sb5\src\gltools\include\glbatch.h(90): error C2065: 'vNorms' : undeclared identifier
1>c:\sb5\src\gltools\include\glbatch.h(91): error C2065: 'vColors' : undeclared identifier
1>c:\sb5\src\gltools\include\glbatch.h(92): error C2065: 'vTex' : undeclared identifier
1>c:\sb5\src\gltools\include\glbatch.h(92): error C2065: 'uiTextureLayer' : undeclared identifier
1>c:\sb5\src\gltools\include\glshadermanager.h(85): error C2146: syntax error : missing ';' before identifier 'uiShaderID'
1>c:\sb5\src\gltools\include\glshadermanager.h(85): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(85): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(99): error C2146: syntax error : missing ';' before identifier 'GetStockShader'
1>c:\sb5\src\gltools\include\glshadermanager.h(99): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(99): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(99): warning C4183: 'GetStockShader': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\glshadermanager.h(102): error C2146: syntax error : missing ';' before identifier 'UseStockShader'
1>c:\sb5\src\gltools\include\glshadermanager.h(102): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(102): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(102): warning C4183: 'UseStockShader': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\glshadermanager.h(107): error C2146: syntax error : missing ';' before identifier 'LoadShaderPair'
1>c:\sb5\src\gltools\include\glshadermanager.h(107): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(107): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(107): warning C4183: 'LoadShaderPair': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\glshadermanager.h(110): error C2146: syntax error : missing ';' before identifier 'LoadShaderPairSrc'
1>c:\sb5\src\gltools\include\glshadermanager.h(110): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(110): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(110): warning C4183: 'LoadShaderPairSrc': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\glshadermanager.h(113): error C2146: syntax error : missing ';' before identifier 'LoadShaderPairWithAttributes'
1>c:\sb5\src\gltools\include\glshadermanager.h(113): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(113): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(113): warning C4183: 'LoadShaderPairWithAttributes': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\glshadermanager.h(114): error C2146: syntax error : missing ';' before identifier 'LoadShaderPairSrcWithAttributes'
1>c:\sb5\src\gltools\include\glshadermanager.h(114): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(114): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(114): warning C4183: 'LoadShaderPairSrcWithAttributes': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\glshadermanager.h(117): error C2146: syntax error : missing ';' before identifier 'LookupShader'
1>c:\sb5\src\gltools\include\glshadermanager.h(117): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(117): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(117): warning C4183: 'LookupShader': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\glshadermanager.h(120): error C2146: syntax error : missing ';' before identifier 'uiStockShaders'
1>c:\sb5\src\gltools\include\glshadermanager.h(120): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\glshadermanager.h(120): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(96): error C2061: syntax error : identifier 'GLuint'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(101): error C2146: syntax error : missing ';' before identifier 'GetIndexCount'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(101): error C2433: 'GLTriangleBatch::GLuint' : 'inline' not permitted on data declarations
1>c:\sb5\src\gltools\include\gltrianglebatch.h(101): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(101): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(101): warning C4183: 'GetIndexCount': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(102): error C2146: syntax error : missing ';' before identifier 'GetVertexCount'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(102): error C2433: 'GLTriangleBatch::GLuint' : 'inline' not permitted on data declarations
1>c:\sb5\src\gltools\include\gltrianglebatch.h(102): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(102): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(102): warning C4183: 'GetVertexCount': missing return type; assumed to be a member function returning 'int'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(109): error C2143: syntax error : missing ';' before '*'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(109): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(109): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(114): error C2146: syntax error : missing ';' before identifier 'nMaxIndexes'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(114): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(114): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(115): error C2146: syntax error : missing ';' before identifier 'nNumIndexes'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(115): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(115): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(116): error C2146: syntax error : missing ';' before identifier 'nNumVerts'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(116): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(116): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(118): error C2146: syntax error : missing ';' before identifier 'bufferObjects'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(118): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(118): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(119): error C2146: syntax error : missing ';' before identifier 'vertexArrayBufferObject'
1>c:\sb5\src\gltools\include\gltrianglebatch.h(119): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(119): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltrianglebatch.h(101): error C2065: 'nNumIndexes' : undeclared identifier
1>c:\sb5\src\gltools\include\gltrianglebatch.h(102): error C2065: 'nNumVerts' : undeclared identifier
1>c:\sb5\src\gltools\include\gltools.h(144): error C2065: 'GLint' : undeclared identifier
1>c:\sb5\src\gltools\include\gltools.h(144): error C2065: 'nMajor' : undeclared identifier
1>c:\sb5\src\gltools\include\gltools.h(144): error C2065: 'GLint' : undeclared identifier
1>c:\sb5\src\gltools\include\gltools.h(144): error C2065: 'nMinor' : undeclared identifier
1>c:\sb5\src\gltools\include\gltools.h(144): error C2182: 'gltGetOpenGLVersion' : illegal use of type 'void'
1>c:\sb5\src\gltools\include\gltools.h(144): error C2078: too many initializers
1>c:\sb5\src\gltools\include\gltools.h(153): error C2143: syntax error : missing ';' before '*'
1>c:\sb5\src\gltools\include\gltools.h(153): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(153): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(157): error C2143: syntax error : missing ';' before '*'
1>c:\sb5\src\gltools\include\gltools.h(157): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(157): error C2086: 'int GLbyte' : redefinition
1> c:\sb5\src\gltools\include\gltools.h(153) : see declaration of 'GLbyte'
1>c:\sb5\src\gltools\include\gltools.h(157): error C2061: syntax error : identifier 'GLint'
1>c:\sb5\src\gltools\include\gltools.h(157): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(162): error C2146: syntax error : missing ';' before identifier 'gltGrabScreenTGA'
1>c:\sb5\src\gltools\include\gltools.h(162): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(162): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(167): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\gltools.h(168): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\gltools.h(169): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\gltools.h(170): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\gltools.h(171): error C2061: syntax error : identifier 'GLfloat'
1>c:\sb5\src\gltools\include\gltools.h(174): error C2061: syntax error : identifier 'GLuint'
1>c:\sb5\src\gltools\include\gltools.h(175): error C2061: syntax error : identifier 'GLuint'
1>c:\sb5\src\gltools\include\gltools.h(177): error C2146: syntax error : missing ';' before identifier 'gltLoadShaderPair'
1>c:\sb5\src\gltools\include\gltools.h(177): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(177): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(178): error C2146: syntax error : missing ';' before identifier 'gltLoadShaderPairWithAttributes'
1>c:\sb5\src\gltools\include\gltools.h(178): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(178): error C2086: 'int GLuint' : redefinition
1> c:\sb5\src\gltools\include\gltools.h(177) : see declaration of 'GLuint'
1>c:\sb5\src\gltools\include\gltools.h(178): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(180): error C2146: syntax error : missing ';' before identifier 'gltLoadShaderPairSrc'
1>c:\sb5\src\gltools\include\gltools.h(180): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(180): error C2086: 'int GLuint' : redefinition
1> c:\sb5\src\gltools\include\gltools.h(177) : see declaration of 'GLuint'
1>c:\sb5\src\gltools\include\gltools.h(180): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(181): error C2146: syntax error : missing ';' before identifier 'gltLoadShaderPairSrcWithAttributes'
1>c:\sb5\src\gltools\include\gltools.h(181): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(181): error C2086: 'int GLuint' : redefinition
1> c:\sb5\src\gltools\include\gltools.h(177) : see declaration of 'GLuint'
1>c:\sb5\src\gltools\include\gltools.h(181): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\sb5\src\gltools\include\gltools.h(183): error C2146: syntax error : missing ')' before identifier 'progName'
1>c:\sb5\src\gltools\include\gltools.h(183): warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
1>c:\sb5\src\gltools\include\gltools.h(183): error C2059: syntax error : ')'
1>c:\sb5\src\gltools\include\gltools.h(184): error C2146: syntax error : missing ')' before identifier 'width'
1>c:\sb5\src\gltools\include\gltools.h(184): error C2182: 'gltGenerateOrtho2DMat' : illegal use of type 'void'
1>c:\sb5\src\gltools\include\gltools.h(184): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(46): error C2378: 'GLbyte' : redefinition; symbol cannot be overloaded with a typedef
1> c:\sb5\src\gltools\include\gltools.h(153) : see declaration of 'GLbyte'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(48): error C2378: 'GLint' : redefinition; symbol cannot be overloaded with a typedef
1> c:\sb5\src\gltools\include\gltools.h(162) : see declaration of 'GLint'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(52): error C2378: 'GLuint' : redefinition; symbol cannot be overloaded with a typedef
1> c:\sb5\src\gltools\include\gltools.h(177) : see declaration of 'GLuint'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1154): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1154): error C2143: syntax error : missing ',' before '*'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1155): error C2146: syntax error : missing ')' before identifier 'i'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1155): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1155): error C2182: 'glArrayElement' : illegal use of type 'void'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1155): error C2491: 'glArrayElement' : definition of dllimport data not allowed
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1155): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1157): error C2061: syntax error : identifier 'GLuint'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1160): error C2146: syntax error : missing ')' before identifier 'list'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1160): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1160): error C2182: 'glCallList' : illegal use of type 'void'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1160): error C2491: 'glCallList' : definition of dllimport data not allowed
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1160): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1167): error C2146: syntax error : missing ')' before identifier 's'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1167): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1167): error C2182: 'glClearStencil' : illegal use of type 'void'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1167): error C2491: 'glClearStencil' : definition of dllimport data not allowed
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1167): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1169): error C2146: syntax error : missing ')' before identifier 'red'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1169): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1169): error C2182: 'glColor3b' : illegal use of type 'void'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1169): error C2491: 'glColor3b' : definition of dllimport data not allowed
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1169): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1170): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1170): error C2143: syntax error : missing ',' before '*'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1175): error C2146: syntax error : missing ')' before identifier 'red'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1175): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1175): error C2182: 'glColor3i' : illegal use of type 'void'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\gl.h(1175): fatal error C1003: error count exceeds 100; stopping compilation
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.67
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
It seems like there is a problem with the headers itself, even though I downloaded them from the official website. I've also tried to compile the same code in Visual Studio 2010 C++ Express and the same errors. I don't want to use Code::blocks because I can find no advantages to using something like that. It all seems like a hassle. I prefer working in Visual Studio.
Edit (added source code):
// Triangle.cpp
// Our first OpenGL program that will just draw a triangle on the screen.
#include <GLTools.h> // OpenGL toolkit
#include <GLShaderManager.h> // Shader Manager Class
#ifdef __APPLE__
#include <glut/glut.h> // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h> // Windows FreeGlut equivalent
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
///////////////////////////////////////////////////////////////////////////////
// Window has changed size, or has just been created. In either case, we need
// to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
///////////////////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering context.
// This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
// Blue background
glClearColor(0.0f, 0.0f, 1.0f, 1.0f );
shaderManager.InitializeStockShaders();
// Load up a triangle
GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
///////////////////////////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
// Perform the buffer swap to display back buffer
glutSwapBuffers();
}
///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
return 0;
}
The errors you're seeing do appear regularly when first time users of OpenGL on the Windows OS start to develop their software. Although in this case the error message is slightly obscured by the glbatch.h where normally the error would point at gl.h.
If you're on Windows, make sure that you include windows.h
before including gl.h
, or any other file which may indirectly include gl.h.
As stated on MSDN, this is necessary for OpenGL to work.
精彩评论