C++编译问题——1模板函数的实现必须在头文件中

news/2025/3/17 13:16:41

今天编译数据结构时,遇见一个编译错误

假设你有一个头文件 SeqList.h 和一个源文件 SeqList.cpp。
SeqList.h

#ifndef SEQLIST_H
#define SEQLIST_H

#include <stdexcept>
#include <iostream>

template<typename T>
class SeqList {
private:
    static const int MAX_SIZE = 100;
    T data[MAX_SIZE];
    int length;
public:
    SeqList();
    void insert(int index, T value);
    // 其他成员函数声明
};

#endif

SeqList.cpp

#include "SeqList.h"

template<typename T>
SeqList<T>::SeqList() : length(0) {}

template<typename T>
void SeqList<T>::insert(int index, T value) {
    if (length >= MAX_SIZE) {
        throw std::overflow_error("List is full");
    }
    if (index < 0 || index > length) {
        throw std::out_of_range("Index out of range");
    }
    for (int i = length; i > index; i--) {
        data[i] = data[i - 1];
    }
    data[index] = value;
    length++;
}

// 其他成员函数实现

main.cpp

#include "SeqList.h"
#include <iostream>

int main() {
    SeqList<int> list;
    list.insert(0, 10);
    return 0;
}

编译时报如下错误
在这里插入图片描述

解决办法
模板函数的实现必须在头文件中,因为编译器在实例化模板时需要看到完整的实现。所以,你可以直接把 insert 函数的实现放在头文件里。
SeqList.h

#ifndef SEQLIST_H
#define SEQLIST_H

#include <stdexcept>
#include <iostream>

template<typename T>
class SeqList {
private:
    static const int MAX_SIZE = 100;
    T data[MAX_SIZE];
    int length;
public:
    SeqList() : length(0) {}

    void insert(int index, T value) {
        if (length >= MAX_SIZE) {
            throw std::overflow_error("List is full");
        }
        if (index < 0 || index > length) {
            throw std::out_of_range("Index out of range");
        }
        for (int i = length; i > index; i--) {
            data[i] = data[i - 1];
        }
        data[index] = value;
        length++;
    }

    // 其他成员函数声明和实现
};

#endif

http://www.niftyadmin.cn/n/5891332.html

相关文章

小程序网络大文件缓存方案

分享一个小程序网络大图加载慢的解决方案 用到的相关api getSavedFileList 获取已保存的文件列表&#xff1b;getStorageSync 获取本地缓存&#xff1b;downloadFile 下载网络图片&#xff1b;saveFile 保存文件到本地&#xff1b;setStorage 将数据储存到小程序本地缓存&…

生成式AI+安全:API防护的“进化革命”——从被动防御到智能对抗的技术跃迁

在生成式AI重塑数字世界的今天&#xff0c;API作为数据流动的“数字血管”&#xff0c;其安全性已成为企业生死存亡的关键。行业数据显示&#xff0c;2025年全球77%的企业将深度整合生成式AI技术&#xff0c;承载着75%互联网流量的API体系&#xff0c;正驱动着超2000亿美元的数…

跟网型逆变器小干扰稳定性分析与控制策略优化simulink仿真模型和代码(包含完整仿真报告)

关注&#xff1a;“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2016Rb&#xff09;软件。建议采用matlab2016 Rb及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 近年来&#xff0c…

使用Python在Word中生成多种不同类型的图表

目录 工具与环境配置 在 Word 中创建图表的步骤 在Word中创建柱形图 在Word中创建条形图 在Word中创建折线图 在Word中创建饼图 在Word中创建散点图 在Word中创建气泡图 在 Word 文档中插入图表不仅能直观呈现数据&#xff0c;还能提升文档的可读性和专业性。常见的图表…

LInux基础--apache部署网站

httpd的安装 yum -y install httpdhttpd的使用 启动httpd systemctl enable --now httpd使用enable --now 进行系统设置时&#xff0c;会将该服务设置为开机自启并且同时开启服务 访问httpd 创建虚拟主机 基于域名 在一台主机上配置两个服务server1和server2&#xff0c;其…

c++ 嵌套名字空间和匿名名字空间

c 嵌套名字空间和匿名名字空间 一、嵌套名字空间&#xff08;Nested Namespaces&#xff09;核心特性示例 二、匿名名字空间&#xff08;Anonymous Namespace&#xff09;核心特性示例 三、关键区别与注意事项注意事项 四、总结 一、嵌套名字空间&#xff08;Nested Namespaces…

a = b c 的含义

简单一句话&#xff1a; result condition && value; condition 为真取 value的值&#xff0c;condition为假就取condition的值&#xff0c;真取后假取前 // 示例 1: b 为真值 let b 1; let c 2; let a b && c; console.log(a); // 输出: 2// 示例 2: b 为…

[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现

标题&#xff1a;[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现 水墨不写bug 文章目录 一、生产者消费者模型特点&#xff1a;二、实现2.1详细解释1. 成员变量2. 构造函数3. Isfull 和 Isempty4. Push 函数5. Pop 函数6. 析构函数7. GetSize 函数 三、总结与多线…