我是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/