C++ 函数模板,未定义的架构符号[重复]

2023-12-31

有人可以向我解释为什么以下内容无法编译吗?希望我错过了明显的事情......

函数.hpp:

template<typename T> string vector_tostr(std::vector<T> v);

函数.cpp:

template<typename T> string vector_tostr(std::vector<T> v){
    std::stringstream ss;
    std::string thestring = "";
    if(v.size() > 0){
        ss << "[";
        for(size_t i = 0; i < v.size(); i++){
            if(i != 0)
                ss << " ";
            ss << v[i];
        }
        ss << "]";
        thestring = ss.str();
    }
    return thestring;
}

main.cpp

#include "functions.hpp"
int main(int argc, char *argv[]){
   vector<int> thevector;
   thevector.push_back(1);
   thevector.push_back(2);

   string result = vector_tostr(thevector);
   //I have also tried vector_tostr<int>(thevector)
}

我收到的神秘错误如下:

体系结构 x86_64 的未定义符号:“std::basic_string, std::allocator > vector_tostr(std::vector >)",引用 从: main.o ld 中的 _main:未找到架构 x86_64collect2 的符号:错误:ld 返回 1 退出状态 make:*[主要] 错误1


不允许以与普通函数相同的方式分离模板化函数的声明和定义(声明在“.hpp”文件中,定义在“.cpp”文件中)。有几种方法可以解决这个问题。

您可以在头文件中的同一位置声明并定义该函数。

OR

你可以在一个名为的文件中尝试这个functions.inl:

template<typename T> 
inline string vector_tostr(std::vector<T> v){
    std::stringstream ss;
    std::string thestring = "";
    if(v.size() > 0){
        ss << "[";
        for(size_t i = 0; i < v.size(); i++){
            if(i != 0)
                ss << " ";
            ss << v[i];
        }
        ss << "]";
        thestring = ss.str();
    }
    return thestring;
}

然后,在头文件的末尾(functions.hpp),输入:

#include "functions.inl"

.inl是内联头文件的文件扩展名。您可以使用它来分隔声明 以及模板化函数的定义。

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

C++ 函数模板,未定义的架构符号[重复] 的相关文章

随机推荐

  • Python - ElementTree - 不能在元素上使用绝对路径

    当我尝试运行以下代码时 我在 ElementTree 中收到此错误 SyntaxError cannot use absolute path on element 我的 XML 文档如下所示
  • JSON 迭代器的类型安全警告

    我的问题来自于从 JSONObject 获取迭代器 最简单形式的代码生成错误 String json client retrieveList JSONObject jsonList new JSONObject json Iterator
  • Java - 不可变数组线程安全

    我有一个关于 Java 内存模型的问题 这是一个呈现问题的简单类 public class ImmutableIntArray private final int array public ImmutableIntArray array n
  • 如何有效地从 std::set 中选择随机元素

    如何有效地从一个随机元素中选择一个std set A std set iterator is 不是随机访问迭代器 所以我不能像为一个随机选择的元素那样直接索引std deque or std vector I could获取从返回的迭代器s
  • 表达式 lambda 和语句 lambda 之间的区别

    表达式 lambda 和语句 lambda 之间有区别吗 如果是这样 有什么区别 在下面的链接中找到了这个问题 但无法理解答案 什么是 Lambda 表达式 C 面试题 http csharpinterviewfaq blogspot in
  • MFMailComposeViewController 未从视图中消失

    我有以下代码 当调用操作表上的按钮时会调用该代码 但是 当我按取消 然后删除草稿时 它只是收费并且不会关闭 我在应用程序的其他地方使用相同的代码 并从选择的表格视图单元格中调用它 并且它可以在那里找到 有什么想法为什么它在这里不起作用吗 当
  • 当变量超出范围时是否意味着它不存在?

    我不确定我是否理解作用域 超出作用域的变量 我正在使用 Ruby 是否存在于内存中的某处 或者它是否停止存在 我知道你无法访问它 说超出范围的变量不再存在是不准确的吗 也许这是一个哲学问题 如果您使用托管语言 那么您不会分配和取消分配内存
  • Google Oauth2 userinfo API 不返回用户名数据

    在过去的几个月里 我一直在使用 OAuth 登录后使用此 url 来检索用户的名称和信息 https www googleapis com oauth2 v1 userinfo alt json 这给了我以下格式的 JSON id 1234
  • openGL以伪3D视角绘制扭曲的精灵(图像)

    好吧 这将是一个很难解释的事情 我正在使用 AndEngine 我认为是 openGL 为 Android 制作一个非常基本的 伪 3d 赛车游戏 我不相信使用 AndEngine 真的与这个问题有任何关系 因为我直接访问 openGL 函
  • UILocalizedIndexedCollat​​ion 仅返回英文排序规则

    我正在尝试使用以下方法获取像联系人这样的本地化索引UILocalizedIndexedCollation 在 通讯录 中 当我更改语言时 索引会更改以匹配语言 然而sectionIndexTitles始终返回英文索引 我已经用我创建的演示应
  • ValueError:“10.0.0.0/24”似乎不是 IPv4 或 IPv6 网络

    我想在 Python 中使用 IP 子网 IP 地址 我使用以下命令创建了 Python 代码ipaddress模块 当我在 pycharm IDE 中运行代码时 它工作正常 但是当我在命令提示符下键入时运行python test py 它
  • 如何使用 BEM 正确设置元素的范围?

    给定以下 BEM 树结构 其中存在五个嵌套级别 collection main features top story byline author 根据 BEM 的命名约定 其中一个元素是块的一部分 并且在它所属的块之外没有任何意义 命名该元
  • 什么是“别名”流缓冲区?

    什么是 别名流缓冲区 我在评论中遇到了这个词answer https stackoverflow com questions 3318714 check if ostream object is cout or ofstream c 331
  • 在后台接收 UIPasteboard (generalPasteboard) 通知

    有办法做到这一点吗 我注册我的对象UIPasteboardChangedNotification在启动时 但是当将其发送到后台并打开 例如 Safari 并复制一些文本时 我的处理程序永远不会被调用 我现在只使用模拟器 我都用过 NSNot
  • 自定义开关按钮动画

    我用的是定制的开关按钮 in the 自定义开关按钮 https stackoverflow com questions 30593193 creating sliding on off switch button in javafx an
  • Flexbox 项目之间的间距

    这就是我要的 但这是我最接近的 body margin 0 padding 0 border 1px solid red flex display ms flexbox display webkit box display webkit f
  • 如何在 flink 独立安装上进行 kerberos 身份验证?

    我有一个独立的 Flink 安装 我想在其上运行一个将数据写入 HDFS 安装的流作业 HDFS 安装是 Cloudera 部署的一部分 需要 Kerberos 身份验证才能读取和写入 HDFS 由于我没有找到有关如何使 Flink 与受
  • GLES20Canvas.nDrawDisplayList 很慢

    我有一个正在尝试显示的自定义视图 但是我看到它上面有一堆抖动 一切都滚动缓慢 并且响应速度不及应有的水平 我使用了traceview并看到了 GLES20Canvas nDrawDisplayList 似乎要花很多时间来执行 有什么帮助吗
  • Javascript 中如何检测对象是否已被垃圾回收?

    我正在构建一个 JavaScript 游戏 它创建一个Level使用 var 的对象 function start var myGameLevel new Level 2 This Levelobject 有很多功能 主要是向 DOM 添加
  • C++ 函数模板,未定义的架构符号[重复]

    这个问题在这里已经有答案了 有人可以向我解释为什么以下内容无法编译吗 希望我错过了明显的事情 函数 hpp template