gpt4 book ai didi

c++ - 错误 LNK2005。看起来一个文件被包含了两次

转载 作者:行者123 更新时间:2023-11-28 00:15:39 25 4
gpt4 key购买 nike

我想用 OpenGL 写一个小游戏,我有一个 FileUtils.hppReadFile -函数,我有一个类 ShaderProgram它处理着色器并使用 FileUtils .

现在,当我想启动程序时,出现了这个错误:

ShaderProgram.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl ReadFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?ReadFile@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z) already defined in Main.obj

我对 C++ 没有多少经验,但我认为这个错误告诉我,我的 ReadFile函数定义了两次。如果您两次包含没有 #pragma once 的头文件,就会发生这种情况。或头球后卫。

我的 FileUtils.hpp看起来像这样:

#pragma once  

#include <string>
#include <iostream>
#include <fstream>

std::string ReadFile(const std::string& fileName)
{
// File reading is done here.
// Not important for this question.
}

我的 ShaderProgram包括这个标题:

#pragma once

#include <string>
#include <GLEW\glew.h>
#include "FileUtils.hpp"

// Shader stuff done here

还有我的Main.cpp包括 ShaderProgram.hpp :

#include "ShaderProgram.hpp"
#include "Window.hpp"

#define WIDTH 800
#define HEIGHT 600
#define TITLE "Voxelworld"

#define VERTEX_SHADER_FILE "voxelworld.v.glsl"
#define FRAGMET_SHADER_FILE "voxelworld.f.glsl"

using namespace voxelworld;

int main(int argc, char *argv[])
{
Window window = Window(WIDTH, HEIGHT, TITLE);
ShaderProgram shaderProgram = ShaderProgram(VERTEX_SHADER_FILE, FRAGMET_SHADER_FILE);

while (!window.IsCloseRequested())
{
shaderProgram.Use();
window.Update();
shaderProgram.StopUse();
}

return 0;
}

Window.hpp既不包括 FileUtils.hpp也不ShaderProgram.hpp .

我很确定我只是在某个地方犯了一个愚蠢的错误,但我不知道在哪里。

最佳答案

除非函数小到可以内联(在这种情况下您应该将其标记为内联),否则不要在头文件中定义函数,仅声明他们。

所以在头文件中做例如

std::string ReadFile(const std::string& fileName);

然后在一个源文件中做完整的定义:

std::string ReadFile(const std::string& fileName)
{
...
}

您现在遇到的问题是,该函数将在您包含头文件的所有源文件 ( translation units) 中定义

关于c++ - 错误 LNK2005。看起来一个文件被包含了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30507411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com