C++:避免​​重复符号链接器错误

2024-01-03

我收到链接器错误:

duplicate symbol __ZN5ENDF64FileILNS_7MF_enumE1EE4readEv in:
    Read.cpp.o
    Material.cpp.o

其中重复的符号名称是:

$ c++filt __ZN5ENDF64FileILNS_7MF_enumE1EE4readEv
  ENDF6::File<(ENDF6::MF_enum)1>::read()

我知道我无法在多个位置定义相同的函数,这就是导致此链接器错误的原因。 (我看过这个问题:ld:重复符号 https://stackoverflow.com/questions/282700/ld-duplicate-symbol)我认为我没有read()函数在多个地方定义,但是链接器(clang++)说我愿意。

我在哪里复制read() symbol?

我的代码结构如下所示:

//MFs.hpp
#ifndef MFS_HPP
#define MFS_HPP
enum class MF_enum {
...
}
#endif


//File.hpp
#ifndef FILE_HPP
#define FILE_HPP

#include "MFs.hpp"

// Definition of class File
template<>
class File {
...
}

// Definition of File<...>::read() function
template <>
void File<1>::read()
{
    std::cout << "Reading into MF=1"<< std::endl;
}

#endif

没有File.cpp因为File类是模板化的。所有定义(和声明)都在File.hpp

// Material.cpp
#include "File.hpp"
...

// Material.hpp
#ifndef MATERIAL_HPP
#define MATERIAL_HPP

#include "File.hpp"
...
#endif

最后是驱动代码:

// Read.cpp
#include "Material.hpp"
#include "File.hpp"

int main (){
...
}

模板的(完整)特化并不是模板本身。如果您正在专门化该函数,那么您需要在标头中声明它并在单个翻译单元中提供实现,或者使定义内联:

// Header [1]
template <int>
class File {
   // ...
   void open();
};
template <>
void File<1>::open(); // just declaration

// Single .cpp
template <>
void File<1>::open() { ... }

或者:

// Header [2]
template <int>
class File {
   // ...
   void open();
};
template <>
inline void File<1>::open() { ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:避免​​重复符号链接器错误 的相关文章

  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn

随机推荐

  • 麦克风检测 Actionscript 3

    我在检测是否检测到麦克风时遇到一些问题 我正在运行该函数Microphone getMicrophone 那应该返回null如果没有连接麦克风 或者用户在安全面板上单击了 拒绝 对吗 我面临的问题是 在某些没有安装麦克风的计算机上 Micr
  • 从并行流捕获异常

    我有一堆列作为 csv 文件中的字符串数组 现在我想解析它们 由于此解析需要日期解析和其他不太快的解析技术 因此我正在考虑并行性 我对其进行了计时 这需要一些时间 我的简单方法 Stream of columns parallel forE
  • 自定义相对布局不显示子视图

    我正在尝试创建一个包含两个 imageView 的自定义相对布局 一个图像视图出现在整个屏幕上 另一个图像视图出现在第一个图像视图的左上角 后来我在活动的 xml 文件中使用这个自定义视图 但是 以下代码不会在显示屏上显示任何内容 任何视图
  • AWS Glue:如何在输出中添加包含源文件名的列?

    有谁知道如何将源文件名添加为粘合作业中的列 我们创建了一个流程 在其中抓取 S3 中的一些文件以创建架构 然后 我们编写了一个作业 将文件转换为新格式 并将这些文件以 CSV 形式写回另一个 S3 存储桶 以供管道的其余部分使用 我们想要做
  • Rust:有没有办法使用 map 来缩短 if/else 代码?

    我很难如何使用地图 如下所示 为什么 Rust 需要 if let 语法 https stackoverflow com questions 27534364 why does rust need the if let syntax 有没有
  • 使用页码作为输入从现有 pdf 中剪辑并创建新 pdf - pdfbox

    我有一个 10 页的 pdf 文件 我需要将第 2 页剪切到第 5 页并创建一个新的 pdf 我正在做的事情如下 PDDocument pddDocument PDDocument load new File sample pdf PDFT
  • 冲突的 UNMET 依赖地狱 angular@2 / rxjs zone.js

    我相信我已经事先成功解决了此类问题 或多或少遵循了这个流行问题中概述的方法 https stackoverflow com a 35738361 108350 https stackoverflow com a 35738361 10835
  • 如何使用 KCachegrind 和 Callgrind 只测量部分代码?

    我想用valgrind分析我的代码 问题是 我有一个我不感兴趣的巨大启动序列 我在中找到了定义valgrind callgrind h这应该对我有帮助 CALLGRIND START INSTRUMENTATION CALLGRIND ST
  • 将 TouchDelegate 扩展到视图的父级之外

    我有一个如下所示的布局 我正在尝试扩大绿色视图的可点击区域 我用于此目的的代码是 public static void setTouchDelegate View view float dimen final View parent Vie
  • 如何在没有 Rake 的情况下运行完整的 MiniTest 套件?

    看着这个问题 https stackoverflow com questions 4788288 how to run all the tests with minitest已经 这或多或少反映了我目前运行整个套件的方式 此外 我还设置了以
  • 使用 PHP 在 MySQL 数据库中存储多个复选框数据

    我希望将多个复选框值存储到数据库的一个字段中 例如 1 24 56 100 我想知道如何实现这一点 如果我想在查询中调用变量 PHP 如何从数据库读取这些值 基本上 我正在创建一个博客应用程序 为了乐趣和体验 我希望用户能够通过复选框更改每
  • Reactjs:未捕获类型错误:无法设置 null 属性“innerHTML”

    import React Component from react import ReactDOM from react dom export default class Game extends Component constructor
  • Clojure 中的链式调用?

    我正在尝试在 Clojure 中实现埃拉托斯特尼筛法 我想测试的一种方法是 获取范围 2 3 4 5 6 N For 2 lt i lt N 通过我的范围filter删除乘数i For i 1第 次迭代 使用前一次过滤的结果 我知道我可以做
  • 在scala中将Spark Dataframe(带有WrappedArray)转换为RDD [labelPoint]

    我是 Scala 新手 我想将 dataframe 转换为 rdd 让标签 特点转换成RDD labelPoint 用于MLlib的输入 但我找不到处理的方法WrappedArray scala gt test printSchema ro
  • Laravel 4 - 如何使用关系列的 where 条件

    这就是我想要的 我有两张桌子 一个是 餐厅 另一个是 设施 这些表很简单 并且是一对一的关系 就像有一张餐厅的桌子id name slug等 另一个表称为facilities with id restaurant id wifi parki
  • Rgb、Rgba、Hsl、Hsla 颜色编码的正则表达式模式

    我正在寻找这种字符串的正则表达式 rgb r g b rgba r g b a hsl h s l hsla h s l a with r g b integer included between 0 and 255 a float bet
  • TFS 将特定版本获取到单独的文件夹中

    我目前正在开发一个使用 TFS 源代码控制的项目 我们刚刚收到了旧版本代码的错误报告 我需要下载该版本的代码来测试它 我的第一个想法是 获取特定版本 来提取代码 但我不想将该版本放入我当前的工作区目录中 有没有一种简单的方法可以将 获取特定
  • 如何在android中建立UDP连接

    我正在尝试在我的之间建立联系galaxy tab and my laptop 因此 我尝试在笔记本电脑上运行服务器活动 在选项卡上运行客户端活动 但它不起作用 这是服务器和客户端代码 错误在哪里 SERVER public class Ma
  • 正则表达式匹配所有 \p{L} 但不匹配 \p{Alpha}

    我怎样才能匹配所有 p L 但不是 p Alpha 在正则表达式中 是否可以实现一个逻辑AND在 Java 正则表达式中 如果答案是肯定的 那么如何实现呢 是的 通过使用否定字符类 http www regular expressions
  • C++:避免​​重复符号链接器错误

    我收到链接器错误 duplicate symbol ZN5ENDF64FileILNS 7MF enumE1EE4readEv in Read cpp o Material cpp o 其中重复的符号名称是 c filt ZN5ENDF64