C++ Eclipse奇数编译错误消息

C++ Eclipse奇数编译错误消息,c++,eclipse,C++,Eclipse,我的代码中出现了非常奇怪的错误。在声明函数的行上,它表示字符串不是std的一部分,并且“变量”SDL_Texture loadImage“具有初始值设定项,但类型不完整”。在那之后的线上,它说它期待一个;在大括号前。这段代码在一分钟前就可以正常工作了。我能做些什么来修复它?如果你需要更多的信息,我很乐意提供。另外,我在Linux上运行,所以这可能也会有所不同 #include <SDL2/SDL.h> #include <SDL2/SDL_image.h> #includ

我的代码中出现了非常奇怪的错误。在声明函数的行上,它表示字符串不是std的一部分,并且“变量”SDL_Texture loadImage“具有初始值设定项,但类型不完整”。在那之后的线上,它说它期待一个;在大括号前。这段代码在一分钟前就可以正常工作了。我能做些什么来修复它?如果你需要更多的信息,我很乐意提供。另外,我在Linux上运行,所以这可能也会有所不同

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include "LevelRenderer.h"
#include "err_log.h"

SDL_Texture loadImage(std::string path)
{
    return loadTexture(getResourcePath() + path + ".png", getLevelScreen());
}

这意味着您没有包含定义SDL_纹理的标题;只有声明它的人。这使得它不完整,你只能用它做有限的事情。特别是,您不能创建它的实例,就像此函数按值返回时所做的那样

根据我的观点,你需要包括

因为您使用的是std::string,所以还应该包括。这可能是第二个错误的原因;但是,即使其他标题中有一个碰巧包含了它,最好不要依赖它。

两个问题

第一,你忘了包括在内

第二,loadTexture返回一个指针,所以您需要

SDL_Texture* loadImage(std::string path)
{
    return loadTexture(getResourcePath() + path + ".png", getLevelScreen());
}

不合理的编译器消息存在是有原因的;编译器比你我都理性得多。你把它包括在哪里?如果没有这个头文件,实际上就没有std::string这样的东西。在这里暗中尝试一下,但是您可能想返回一个指向纹理的指针,而不是仅仅根据我使用SDL的经验返回纹理本身。不幸的是,这不起作用。它仍然给了我同样的错误。