我是C ++的新手,所以请耐心一点。

我有一个构造函数的类:

Window(int width, int height, const std::string& title);


如头文件中所定义。

然后我有代码:

#include "window.h"

int main(int argc, char** argv) {
    new Window(800, 600, "Elysian Engine");
}


在Main。

生成时,出现错误“未定义对'Window(int,int,std :: string const&)'的引用”,这是我不理解的,因为我认为我正确地导入了它和所有内容。我知道这是一个链接错误,但是我不确定为什么。

谢谢!

-编辑-

window.cpp的代码:

#include "window.h"
#include <SDL2/SDL.h>
#include <SDL/SDL.h>
#include <GL/glew.h>

Window::Window(int width, int height, const std::string& title) :
        width(width),
        height(height),
        title(title),
        isCloseRequested(false) {
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_GL_SetAttribute(SDL_GL_RED_SIZE,                8);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,              8);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,               8);
    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,              8);
    SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,             32);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,              16);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,            1);

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,    SDL_GL_CONTEXT_PROFILE_CORE);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,   3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,   2);

    window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);
    context = SDL_GL_CreateContext(window);

    SDL_GL_SetSwapInterval(1);

    GLenum res = glewInit();

    if (res != GLEW_OK) {
        fprintf(stderr, "Error: '%s'\n", glewGetErrorString(res));
    }
}

Window::~Window() {
    SDL_GL_DeleteContext(context);
    SDL_DestroyWindow(window);
    SDL_Quit();
}

最佳答案

因为您的代码似乎没有引起问题,所以我将介绍IDE。

当我第一次开始使用Code :: Blocks时,我遇到了“未定义的引用”问题。我有多种解决方法。


退出代码::阻止并重新打开它。这解决了我的问题,次数超过了我希望计算的次数。这类似于最终意识到可执行文件的行为异常,因为您需要在编译前运行make clean。有时,您正在编译旧版本的代码而没有意识到。
从项目中删除window.h和window.cpp,然后重新添加它们。这类似于上面的解决方案。尽管这以前对我有用,但我不知道确切的原因。
包括window.h的完整路径。尝试使用#include "window.h"代替#include "/path/goes/here/window.h"。您当前的位置(在您的#include语句中指定)可能不正确。
检查为项目选择的编译器。当我使用Code :: Blocks时,我通常使用gcc。但是,在某些情况下,我收到了我不理解或无法解决的各种错误(尝试编译时),只是得知我不小心从了编译器选择列表中选择了一些gcc变体,而我没有甚至已经安装。
创建一个新项目。将您的源文件从Code :: Blocks创建的项目文件夹中移出,然后删除该项目文件夹。启动代码:: Blocks,创建一个新项目,然后将源文件添加到新项目中。
如果所有其他方法都失败了,并且您绝对必须使用Code :: Blocks,请重新安装完整的软件包。我必须第一次使用Code :: Blocks进行此操作(这也是我第一次使用IDE)。我意识到我已经安装了IDE的准系统,这限制了我的能力(包括编译)。自然,我现在无法访问Code :: Blocks网站,否则我也将在此处提供链接。在这种情况下,我可以肯定地说,功能全面的稳定版本将是您可以在Code :: Blocks的“下载”页面上找到的最大的稳定版本(以MB为单位)。重新安装后,创建一个新项目并将您的文件添加回去。


我最终转而使用在IDE中编写代码(用于linting!),并自己处理makefile。自从我使用Code :: Blocks以来已经有一段时间了,但是上面的每个项目符号都代表了解决方案/解决方法,它们在我使用Code :: Blocks时已帮助您解决了您的特定问题(或通常而言)。

关于c++ - C++奇怪的“ undefined reference ”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27607284/

10-12 02:58