在 C++ 中重新定义 template

2024-01-12

我一直在寻找解决我的问题的方法,但似乎找不到。我正在使用 Code::Blocks,并且收到模板类的重新定义错误。

这是我的“vectorAux.h”文件:

#ifndef vectoraux_h
#define vectoraux_h

#include <vector>
#include <algorithm>
#include <iostream>

template <typename T>
void removeDup(std::vector<T> & v);

template <typename T>
unsigned seqVectSearch(const std::vector<T> & v, unsigned first,
               unsigned last, const T& target);

template <typename T>
void writeVector(const std::vector<T> & v);

#include "vectorAux.cpp"
#endif

这是我的“vectorAux.cpp”文件:

#include "vectorAux.h"

#include <vector>
#include <algorithm>
#include <iostream>

template <typename T>
void removeDup(std::vector<T> & v)
{
    std::vector<int> vector1;
    unsigned i, last = v.size();

    for(int j = 0; j <= v.size(); j++)
    {
        std::cout << seqVectSearch(v, j, last, j);
        if(seqVectSearch(v, j, last, j) != v[i])
            vector1.push_back(seqVectSearch(v, j, last, j));
    }
}

template <typename T>
unsigned seqVectSearch(const std::vector<T> & v, unsigned first,
                       unsigned last, const T& target)
{
    unsigned i = first;
    while((v[i] != target) && (v[i] <= last))
    {
        if(v[i] == target)
            return i;
        i++;
    }
    return last;
}

template <typename T>
void writeVector(const std::vector<T> & v)
{
    unsigned i;
    unsigned n = v.size();

    for (i = 0; i < n; i++)
        std::cout << v[i] << ' ';
    std::cout << std::endl;
}

该程序的最终文件是“vectorDriver.cpp”,但这个文件没有错误。这只是通过调用函数来运行程序:

#include "vectorAux.h"
#include <vector>
#include <iostream>

void fillVector(std::vector<int> & vect);

int main()
{
  using namespace std;

  vector<int> vect;

  fillVector(vect);
  cout << "Testing removeDup" << endl;
  cout << "Original vector is  ";
  writeVector(vect);

  removeDup(vect);
  cout << "Vector with duplicates removed is  ";
  writeVector(vect);
  cout << endl;
  writeVector(vect);

  return 0;
}

void fillVector(std::vector<int> & vect)
{
  int arr[] = {1,7,2,7,9,1,2,8,9};
  unsigned arrsize = sizeof(arr)/sizeof(int);

  vect = std::vector<int>(arr, arr+arrsize);
}

我真的很感激所提供的任何和所有帮助/建议!我环顾了一段时间,我找到的每个来源都说要保护头文件,但我已经这样做了,但我的问题仍然存在。


您将 vectorAux.cpp 包含在 vectorAux.h 中。我猜你也在单独编译 vectorAux.cpp 。因此,您最终将 vectorAux.cpp 中的代码编译两次。

答案很简单,将代码从vectorAux.cpp移至vectorAux.h,删除vectorAux.cpp,你不需要它。

模板代码几乎总是放在头文件中。

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

在 C++ 中重新定义 template 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span

随机推荐

  • 主干路由器侦听器未命中哈希标签

    我的问题是 当我在链接中使用哈希标签时 它只是将哈希附加到 url 而不是转到路由 例如 ToDo public offline2 html test 如果我离开tag 由于某种原因它确实会转到路由器 我已经用以下代码关闭了 jquery
  • 本地通知未根据时区进行调整

    我正在安排一个带有 NSDate 的本地通知 时间设置为晚上 9 点 并将通知的时区设置为 UTC GMT 如果我将设备时区设置为 UTC 时间设置为晚上 8 59 则通知将按预期在晚上 9 点触发 但是 如果我将设备时区设置为美国西海岸
  • Clojure 交换!原子出队

    有没有更简单的方法在 Clojure 中编写此代码 def queue atom top nil queue PersistentQueue EMPTY swap queue hash map top nil queue conj queu
  • 如何阻止来自中国的请求?

    我有一个比较流行的 API 每天 10 000 多个请求 每天从某个 IP 地址发出 10 个请求后 我会返回一条消息 告诉用户如果想更多地使用该服务 则需要支付一些现金 今天早上 我发现我的网络服务运行速度非常慢 我检查了数据库 发现我收
  • PHP 中值对象的示例是什么?

    我读过很多值对象的 C 示例 并且我知道它是一个由其值标识的 对象 如果值发生变化 则该对象是 新的 然而 当涉及到 PHP 时 这似乎没有意义 要么是这样 要么我只是没有建立联系 值对象只是一个字符串吗 为了将这一点放在上下文中 在许多面
  • Java 8 中限制 groupBy

    如何按每个条目限制 groupBy 例如 基于这个例子 流分组依据 http www leveluplunch com java examples java util stream groupingBy example studentCla
  • 禁用 awt/swing 调试(精细)日志消息

    我正在使用 java 日志记录将应用程序的日志消息写入日志文件和其他目的地 将日志级别设置为FINE 我还从 AWT Swing 收到 不需要的 消息 例如 0 when grabbed 1 contains 2 和别的 查看 JDK 源代
  • Android - 如何隐藏/显示进度条onclick

    我试图在单击按钮时显示进度条 当我测试应用程序时 它强制关闭 停止 在添加进度条代码之前 我的应用程序运行良好 如果这很重要的话 我也使用切换按钮 并且我想要旋转的进度条而不是对话框 有什么帮助吗 这是我的代码 Override publi
  • CoffeeScript 类的范围

    我想在类属性中嵌套多个函数 如下所示 不幸的是 他们无法访问该类的主要范围 我可以在不传递每个嵌套函数引用的情况下解决这个问题吗this class myClass constructor gt errors doSomething gt
  • 使用 extjs4 重用自定义组件

    我在 JavaScript 文件中创建了一个自定义网格 我想将它用作单独 js 文件中不同面板的 xtype 如果我在单个面板上使用它 它工作得很好 但是当我尝试同时在不同的面板上使用它时 我在 chrome 开发人员工具控制台中收到错误消
  • UDID 或 IMEI——哪个更好?

    在开发需要我唯一识别电话用户的应用程序时 我希望得到一些关于最好使用手机的 UDID 还是 IMEI 的建议 使用两者有什么优点 缺点吗 所有评论将不胜感激 ANDROID ID 的优点 设置 安全 ANDROID ID 这是设备首次启动时
  • Spring RestTemplate 中未找到 HttpMessageConverter

    当我使用 Spring RestTemplate 检索 JSON 时出现错误 错误说 Could not extract response no suitable HttpMessageConverter found for respons
  • 如何在 VSCode 的默认主题中自定义 Python 的文档字符串颜色?

    有人可以向我解释一下如何在 VSCode 的默认主题中自定义 Python 的文档字符串颜色吗 我想通过用户设置来完成此操作 因为希望能够保存我的配置文件 我尝试使用 editor tokenColorCustomizations 但它会影
  • 自定义损失函数 Keras Tensorflow

    我需要一个自定义加权 MSE 损失函数 我在 keras backend 中定义了它 from keras import backend as K def weighted loss y true y pred return K mean
  • mvn 命令未被识别为内部或外部命令

    我正在得到mvn命令未被识别为内部或外部命令 我已经设置了 M2 HOME JAVA HOME 并将 M2 HOME bin 添加到路径变量中 都是系统变量 仍然遇到同样的问题 回显变量向我显示正确的路径 Maven 路径 C apache
  • 如何下载整个CRAN存储库?

    对于没有互联网的离线 Linux 机器来说 安装具有大量依赖项的 R 包是一场噩梦 我在 SE 中发现了几篇帖子 讨论如何创建本地文件夹 复制所需的包 zip 文件以及使用 install packages 进行安装 然而 查找 下载大量包
  • AngularJS:如何将数据从指令传递到控制器函数

    我正在尝试将一些数据从指令传递到函数中addTrackFromPicker在我的控制器中 scope addTrackFromPicker function message console log addTrackFromPicker me
  • 如何将成员函数指针传递给 std::function

    如何将成员函数指针传递给std function通过一个函数 我将通过比较来解释它 现场测试 http ideone com Xjxt0B template
  • 以编程方式设置 derby.system.home

    需要将 JavaDB derby db 文件的数据库和日志文件移动到部署目录中 数据库在应用程序启动目录中工作 因为 JavaDB 创建了一个名为数据库名称的文件夹 在我的例子中为 mydb 但我想将该目录移动到名为 data create
  • 在 C++ 中重新定义 template

    我一直在寻找解决我的问题的方法 但似乎找不到 我正在使用 Code Blocks 并且收到模板类的重新定义错误 这是我的 vectorAux h 文件 ifndef vectoraux h define vectoraux h includ