C++ 重复符号

2024-04-06

(Mac)

我尝试过命名空间,包括警卫、编译指示一次等。

基本上,这是结构:

CMakeLists.txt

add_executable(Game Game/main.cpp Game/rtexture.cpp)

游戏/main.cpp

#include "cleanup.h"

//...
cleanup(foobar);

游戏/rtexture.cpp

#include "cleanup.h"

//...
cleanup(foobar);

清理.h

//various includes

template<typename T, typename... Args>
void cleanup(T *t, Args&&... args){
    //Cleanup the first item in the list
    cleanup(t);
    //Recurse to clean up the remaining arguments
    cleanup(std::forward<Args>(args)...);
}
/*
 * These specializations serve to free the passed argument and also provide the
 * base cases for the recursive call above, eg. when args is only a single item
 * one of the specializations below will be called by
 * Cleanup(std::forward<Args>(args)...), ending the recursion
 * We also make it safe to pass nullptrs to handle situations where we
 * don't want to bother finding out which values failed to load (and thus are null)
 * but rather just want to clean everything up and let cleanup sort it out
 */
template<>
void cleanup<SDL_Window>(SDL_Window *win){
    if (!win){
        return;
    }
    SDL_DestroyWindow(win);
}
template<>
void cleanup<SDL_Renderer>(SDL_Renderer *ren){
    if (!ren){ 
        return;
    }
    SDL_DestroyRenderer(ren);
}
template<>
void cleanup<SDL_Texture>(SDL_Texture *tex){
    if (!tex){
        return;
    }
    SDL_DestroyTexture(tex);
}
template<>
void cleanup<SDL_Surface>(SDL_Surface *surf){
    if (!surf){
        return;
    }
    SDL_FreeSurface(surf);
}

如果有人问,我确实从教程中获取了这个“cleanup.h”,但找不到一种方法将其包含在多个类中而不声明重复的符号。

Home at cruz45488-y19-MBA13-12 in ~/desktop/sdlworkspace/tmp
$ make
Linking CXX executable Game
duplicate symbol __ZN5RUtil7cleanupI10SDL_WindowJEEEvPT_DpOT0_ in:
    CMakeFiles/Game.dir/Game/main.cpp.o
    CMakeFiles/Game.dir/Game/rtexture.cpp.o
duplicate symbol __ZN5RUtil7cleanupI12SDL_RendererJEEEvPT_DpOT0_ in:
    CMakeFiles/Game.dir/Game/main.cpp.o
    CMakeFiles/Game.dir/Game/rtexture.cpp.o
duplicate symbol __ZN5RUtil7cleanupI11SDL_TextureJEEEvPT_DpOT0_ in:
    CMakeFiles/Game.dir/Game/main.cpp.o
    CMakeFiles/Game.dir/Game/rtexture.cpp.o
duplicate symbol __ZN5RUtil7cleanupI11SDL_SurfaceJEEEvPT_DpOT0_ in:
    CMakeFiles/Game.dir/Game/main.cpp.o
    CMakeFiles/Game.dir/Game/rtexture.cpp.o

有什么帮助吗?谢谢。


与常规函数一样,显式函数模板特化也遵循“单一定义规则”。添加inline允许在标头中进行定义;或者在源文件中定义它们,并在标头中声明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 重复符号 的相关文章

  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • FileStream 构造函数和默认缓冲区大小

    我们有一个使用 NET 4 用 C 编写的日志记录类 我想添加一个构造函数参数 该参数可以选择设置文件选项 WriteThrough http msdn microsoft com en us library system io fileo
  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th
  • UNIX/MacOS 上静态文件的“临时 Web 服务器”?

    是否有一个像小型网络服务器这样的东西 我可以从命令行调用它 只从本地文件系统获取文件并通过特定端口上的 HTTP 为它们提供服务 我希望能够做这样的事情 cd Sites mysite serve 10 0 1 1 8080 这应该会启动一

随机推荐

  • 看板/Scrum 板 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇其他人在他们的公司中使用什么物理看板 Scrum 板 我理解 由于敏感的商业信息 您可能无法提供董事会的照片 我正在寻找答案你
  • 监控内核注册表更改

    人们能否给我指点 没有双关语 我需要研究的主题才能做到这一点 我并不是真正的 Windows 专家 但我很快就能掌握新概念 我看到了 Mark Russinovich 和 Bryce Cogswell 编写的进程监控程序 http tech
  • 字符串交换适用于 char **,但不适用于 char *

    在这个程序中我交换了前两个名字 include
  • 使用 where 子句的慢查询

    我有以下 sql 查询 只需 1 秒即可执行 select a date b rate c type a value from a inner join b on a id b aid c inner join b id c bid whe
  • 强制

    我在网上看到了很多实现此目的的方法 但我尝试过的所有方法要么会破坏页面上的其他 CSS 要么无法一起工作 在本页http www psyklopz com workbench http www psyklopz com workbench
  • 使用 JavaScript 验证电子邮件地址文本框

    我需要验证用户从文本框出来时输入的电子邮件地址 我已经用谷歌搜索了这个 但我得到了表单验证 JScript 我不需要表单验证 我想要文本框验证 我在 JScript 下写了 但 如果电子邮件无效 则不会返回同一页面 function val
  • 如何使用 Cocoa 或 C++ 在 Mac OS X 中截取屏幕截图

    如何在 Mac OS X 中以编程方式截取桌面区域的屏幕截图 我见过两个有趣的选项 但尚未专业使用 它们是屏幕捕获实用程序和 MacFuse 演示 根据手册页 屏幕捕获实用程序从 10 2 开始就已经存在 并且可以通过使用 NSTask 链
  • 以编程方式配置 Log4NetLoggerFactoryAdapter

    我正在使用 NUnit 来测试一个项目 我想配置我的测试以编程方式设置 Common Logging 以使用 Log4Net 这是我尝试过的 NameValueCollection config new NameValueCollectio
  • 为什么分叉我的进程会导致文件被无限读取

    我已经将整个程序简化为一个简短的主程序来复制该问题 所以请原谅我它没有任何意义 input txt 是一个文本文件 其中包含几行文本 这个简化的程序应该打印这些行 但是 如果调用 fork 程序就会进入无限循环 一遍又一遍地打印文件的内容
  • 如何使用 React-Native-FS 进行 mkdir

    我正在尝试向我的 RN 应用程序添加功能 该功能将允许用户在手机的文件系统中创建新目录 我尝试编写代码 以便该函数在路径 storage emulated 0 AppName NewFolder 中创建一个目录 因为 storage emu
  • Java 相当于 session_start()、session_destroy() 和 $_SESSION['username']

    在 PHP 中 当用户登录她的帐户时 我会执行以下操作 以便在用户浏览网站时记住该用户 session start SESSION username username 在可能需要敏感数据的任何其他页面上 我检查 SESSION userna
  • Ratchet PHP - 推送消息服务

    我使用 Ratchet 查看的大多数示例都是针对聊天服务的 我目前正在构建一个应用程序 用户可以在其中登录并根据其用户 ID 从服务器接收通知 我有基本的教程 但是我很难理解以下几点 当 的时候onOpen 方法被调用 我设置了 conn对
  • R 中出现重复值并返回以逗号分隔的唯一值

    我在 R 中有以下数据框 Number ship no 4432 1 4432 2 4564 1 4389 5 6578 6 4389 3 4355 10 4355 10 我想找到重复的Number以独特的方式重复ship no Numbe
  • requests.exceptions.SSLError: [Errno 2] 没有这样的文件或目录

    我正在使用一个名为 Tweetpony 的 python 库 一切正常 除了当我使用 Pyinstaller 打包我的脚本时 我在执行时收到以下错误 Traceback most recent call last File
  • 找不到在 64 位 Windows 上运行 32 位应用程序的 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId

    确实如标题 在 regedit 中查看键值存在 但 Wow6432 键 HKLM SOFTWARE Wow6432Node Microsoft Windows NT CurrentVersion 没有此键 这意味着 32 位应用程序无法在我
  • Xpath 仅选择属性的一部分

    if dt id returns comment 34232 or comment 12我怎样才能让它返回34232 or 12 换句话说 替换 comment with and if span style returns width 80
  • HTML5 音频播放器中的搜索不一致

    我想从特定时间戳开始播放音频 但我什至无法让最简单的例子正常工作 我尝试了以下方法 并进行了修改w3school 的例子 http www w3schools com tags tryit asp filename tryhtml5 av
  • htaccess 301 重定向 htaccess 或 php

    我在 Htaccess 中有一个动态 URL 重写规则 如下所示 RewriteRule cartoon html fm cart new r id 1 location 2 L 此规则导致 URL 为http localhost fm c
  • 如何在 Windows 上升级 pgAdmin 4?

    我安装了 pgAdmin 4 作为 Windows 的 postgres 安装程序的一部分 pgAdmin 现在告诉我有一个更新的版本 我有 4 8 gt 4 5 但是 我没有看到内置的升级功能 当我下载并运行 pgAdmin 4 安装程序
  • C++ 重复符号

    Mac 我尝试过命名空间 包括警卫 编译指示一次等 基本上 这是结构 CMakeLists txt add executable Game Game main cpp Game rtexture cpp 游戏 main cpp includ