【问题标题】:XCode project cannot recognize certain GLUT commandsXCode 项目无法识别某些 GLUT 命令
【发布时间】:2011-11-15 21:38:09
【问题描述】:

我正在 XCode 4 中创建一个 GLUT/OpenGL 项目。我添加了 glut/opengl 框架,将我所有的库链接在一起——一切都很好,除了某些原因我的 main() 函数不接受 glutInit (&argc, argv) 并给我错误消息“没有对 glutInit() 的匹配函数调用。奇怪的是它接受一些其他的 glut 函数,如 glutInitDisplayMode() 和 glutCreateWindow() 但不接受 glutInit( )。

另外,我正在使用 3 个回调函数

glutDisplayFunc(DisplayCallback)    
glutReshapeFunc(ReshapeCallback)    
glutKeyboardFunc(KeyboardCallback) 

我的项目只接受第一个,但不识别其他两个,给出与 glutInit() 相同的错误。

关于可能出现什么问题的任何想法?

【问题讨论】:

  • 发布一个完整的、最小的程序来演示这个问题。

标签: c++ opengl glut xcodebuild


【解决方案1】:

我遇到了完全相同的错误。

我终于通过修改main()函数的参数解决了这个问题。

查看argv 是否声明为const。 从main 函数参数中删除它会使glutInit 错误消失。

// delete const from argv declaration 
int main(int argc, const char * argv[]) // from this,
int main(int argc, char * argv[])       // to this.

【讨论】:

  • 有人能说出为什么会这样吗?我的意思是没有const 它可以工作,它会失败。
  • 这是C++类型不匹配问题,在其他情况下很容易找到并解决。 argv 的 glutInit() 声明意味着 argv 的内容是可写的,但在主函数中,传递给 glutInit 的 argv 是只读的,因此存在冲突。
【解决方案2】:

根据我的拙见,最好const_cast输入参数以避免C++中的类型不匹配,看看下面的代码sn-p:

glutInit(&argc, const_cast<char**>(argv));

通过这种方式,您向程序的未来读者表明您知道argv 是一个常量,并且通过const_cast-ing 它您知道自己在做什么。

【讨论】:

    【解决方案3】:

    不知道您是否找到了答案,但听起来您还没有将 GLUT 框架添加到您的 Xcode 项目中(假设 Xcode 4.x):

    单击主窗口侧栏中最顶部的项目图标。

    点击“Link Binary With Libraries”下的“+”并搜索“glut”。

    添加该框架。

    确定

    #import <GLUT/glut.h>
    

    在你的头文件中。

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 2019-04-17
      相关资源
      最近更新 更多