【问题标题】:C++ OpenGL (freeglut)C++ OpenGL (freeglut)
【发布时间】:2013-11-02 03:08:25
【问题描述】:

我正在尝试从 main 方法上的函数传递对象引用。我认为问题出在那儿。

在java中我会做这样的事情:

Object obj;

theFunction(obj);

方法定义如下:

public void theFunction(Object obj) {
    obj.useMethod();
}

我在 c++ 上所做的是:

void theFunction(Object& obj){
    obj.useMethod();
}

根据我一直在阅读的有关该主题的内容,我认为这种方式是正确的。我正在使用visual studio 2013,它不会抱怨,只有当我编译时。错误信息如下:

1>------ Build started: Project: Radiosity, Configuration: Debug Win32 ------
1>  Source.cpp
1>Source.obj : error LNK2019: unresolved external symbol "public: void __thiscall    Keyboard::specialKeys(class Camera &)" (?specialKeys@Keyboard@@QAEXAAVCamera@@@Z)   referenced in function "void __cdecl display(void)" (?display@@YAXXZ)
1>C:\Users\PC\Documents\Visual Studio 2013\Projects\Radiosity\Debug\Radiosity.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    您遇到了链接错误。

    Keyboard::specialKeys() 在您的代码中声明的某处。这意味着,您在编译代码时使用了正确的头文件。但是您没有链接到正确的库。

    Keyboard::specialKeys() 来自哪个库?您需要它来更正程序的链接。

    在 Visual Studio 中,右键单击您的项目并转到项目设置(或类似内容),然后

    配置属性->链接器->输入->附加依赖

    在此字段中添加正确的库文件。 Keyboard::specialKeys()对应的.lib文件

    【讨论】:

    • 天啊,我不敢相信我错过了。我有两种类似的方法。我忘了把 Keyboard:: 放在方法声明的前面。谢啦!我接受你的回答。非常感谢!
    【解决方案2】:

    我会仔细检查图书馆的链接。代码对我来说看起来不错。第一次开始使用 OpenGL 上下文时,我花了很长时间来设置它。

    还可以查看这些页面上的具体错误:

    http://msdn.microsoft.com/en-us/library/799kze2z.aspx

    http://msdn.microsoft.com/en-us/library/z98k84c3.aspx

    【讨论】:

    • msdn 不是 OpenGL 的官方信息来源,而且微软是竞争对手,已经采取了很多措施来破坏/减慢 OpenGL。
    • 嗯,这些是特定的编译器错误。他们使用的是 Microsoft IDE,所以我不知道您还能去哪里找到这些错误代码。这些错误不是因为 OpenGL,而是来自 Visual Studio,它们是通用链接错误。
    猜你喜欢
    • 2012-06-07
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多