精华内容
下载资源
问答
  • 2019-02-18 21:42:08

    在看《大化数据结构》的过程中,出现了类模板的定义,由于自己c++编写能力并不是很好,自己写了一个类模板,无论怎么写都出现如下错误:

    错误    3    error LNK1120: 2 个无法解析的外部命令    F:\leetcode\Sqlist\Debug\Sqlist.exe    Sqlist
    错误    1    error LNK2019: 无法解析的外部符号 "public: __thiscall List<int>::List<int>(int * const,int)" (??0?$List@H@@QAE@QAHH@Z),该符号在函数 _wmain 中被引用    F:\leetcode\Sqlist\Sqlist\Sqlist.obj    Sqlist

    但是写一般的类就没问题,搞了半天才知道,类模板的定义与实现最好写在同一个文件中,即声明与实现放到一起,具体为啥减下面的博客:

    https://blog.csdn.net/lichengyu/article/details/6792135

    ***********************************************************************************************************************

    test.h文件:

    #ifndef TEST_H
    #define TEST_H
    #include "stdafx.h"


    template <class DataType>
    class List{
        public:    
            List(DataType a[], int n);
            //~List();
            bool push(DataType a, int n);
        
        private:
            DataType data[10];
            int len;
    };


    #endif

    ***********************************************************************************************************************

    test.cpp文件:

    tem#include "stdafx.h"
    #include "test.h"

    plate<class DataType>
    List<DataType>::List(DataType a[], int n){
        for (int i = 0; i < n; i++){
            data[i] = a[i];
        }
    }

    template<class DataType>
    bool List<DataType>::push(DataType a, int n){
        data[n] = a;
        return 1;
    }

    ***********************************************************************************************************************

    main文件:

    #include "stdafx.h"
    #include "SeqList.h"
    #include "iostream"
    #include "test.h"
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[3] = { 1, 2, 3 };
        /*SeqList<int>list(a,3);
        int data;
        list.GetElem(list, 1, &data);
        cout << "data is :" << data << endl*/;
        List<int> list(a,3);
        //List<int> list;
        list.push(0, 3);

        return 0;
    }
     

    将上述test.cpp中的代码放到test.h中就不会报错了,共勉。
     

    更多相关内容
  • 1) 用List模板定义一个List类型的模板对象int_listB,从键盘读入m个整数,调用Push_back函数将这m个整数依次插入到该链表中;(4分) 2) 用List模板定义一个List类型的模板对象int_listC,从键盘读入n个整数,...
  • 类模板模板友元函数定义有2种方式: 1. 将友元模板函数直接定义类模板中。这种方式比较简单直接。 2. 将友元模板函数声明在类模板中,定义类模板之外。这种方式的写法,如果不小心,通常会出现编译没问题,...

    类模板的模板友元函数定义有2种方式:
    1. 将友元模板函数直接定义在类模板中。这种方式比较简单直接。
    2. 将友元模板函数声明在类模板中,定义在类模板之外。这种方式的写法,如果不小心,通常会出现编译没问题,链接时无法解析的错误。
    以下是一个简单的正确的例子:

     1 #include <iostream>
     2 #include <vector>
     3 
     4 template <typename T>
     5 class Number;
     6 
     7 template <typename T>
     8 void print(const Number<T>& n);
     9 
    10 template <typename T>
    11 std::ostream& operator << (std::ostream& os, const Number<T>& n);
    12 
    13 template <typename T>
    14 std::istream& operator>>(std::istream& is, Number<T>& n);
    15 
    16 template <typename T, typename T2>
    17 void printVector(const std::vector<T2>& vt, const Number<T>& n);
    18 
    19 template <typename T>
    20 class Number {
    21 public:
    22     Number(T v) 
    23         : val(v) {}
    24     ~Number() {}
    25 
    26 private:
    27     T val;
    28 public:
    29     friend void print<T> (const Number<T>& n);
    30     friend std::ostream& operator << <T>(std::ostream& os, const Number<T>& n);
    31     friend std::istream& operator>> <T>(std::istream& is, Number<T>& n);
    32 
    33     friend Number<T>& operator += (Number<T>& a, const Number<T>& b)
    34     {
    35         a.val += b.val;
    36         return a;
    37     }
    38     template <typename T2>
    39     friend void printVector<T>(const std::vector<T2>& vt, const Number<T>& n);
    40     template <typename T2>
    41     void memFunc(const std::vector<T2>& vt, const Number<T>& n);
    42 };
    43 
    44 template <typename T>
    45 std::ostream& operator <<(std::ostream& os, const Number<T>& n)
    46 {
    47      os << n.val << std::endl;
    48      return os;
    49 }
    50 
    51 template <typename T>
    52 std::istream& operator >>(std::istream& is, Number<T>& n)
    53 {
    54     is >> n.val;
    55     return is;
    56 }
    57 
    58 template <typename T>
    59 void print<T> (const Number<T>& n)
    60 {
    61     std::cout << n;
    62 }
    63 
    64 template <typename T, typename T2>
    65 void printVector(const std::vector<T2>& vt, const Number<T>& n)
    66 {
    67     for (unsigned int i = 0; i < vt.size(); i++)
    68         std::cout << vt.at(i) << " ";
    69     std::cout << "=> " << n;
    70 }
    71 
    72 template <typename T>
    73 template <typename T2>
    74 void Number<T>::memFunc(const std::vector<T2>& vt, const Number<T>& n)
    75 {
    76     for (unsigned int i = 0; i < vt.size(); i++)
    77         std::cout << vt.at(i) << " ";
    78     std::cout << "=> " << n;
    79 }

    1) 以上代码中,operator +=被定义在类模板内部。其他3个函数先被声明(需提前声明类模板,如果模板函数的参数中含有类模板),然后在类模板中被声明为友元函数, 之后被定义在类模板体之外。
    2) 请注意当模板函数被声明为类模板的友元时,在函数名之后必须紧跟模板实参表,用来代表该友元声明指向函数模板的实例。否则友元函数会被解释为一个非模板函数,链接时无法解析。
    3) 友元模板函数的模板参数类型,并不一定要求是类模板的参数类型,也可以另外声明。

    展开全文
  • 习题 9.12 将例9.14改写为在类模板定义各成员函数。 代码: #include<iostream> using namespace std; template <class numtype> class Compare { public: Compare(numtype a, numtype b) { ...

    习题 9.12 将例9.14改写为在类模板外定义各成员函数。

    代码:

    #include<iostream>
    using namespace std;
    
    template <class numtype>
    class Compare
    {
    public:
    	Compare(numtype a, numtype b)
    	{
    		x = a; y = b;
    	}
    	numtype max();
    	numtype min();
    
    private:
    	numtype x, y;
    };
    
    template <class numtype>
    numtype Compare<numtype>::max()
    {
    	return (x > y) ? x : y;
    }
    
    template <class numtype>
    numtype Compare<numtype>::min()
    {
    	return (x < y) ? x : y;
    }
    
    int main()
    {
    	Compare<int> cmp1(3, 7);
    	cout << cmp1.max() << " is the Maximum of two integer numbers." << endl;
    	cout << cmp1.min() << " is the Minimum of two integer numbers." << endl << endl;
    	Compare<float> cmp2(45.78, 93.6);
    	cout << cmp2.max() << " is the Maximum of two float numbers." << endl;
    	cout << cmp2.min() << " is the Minimum of two float numbers." << endl << endl;
    	Compare<char> cmp3('a', 'A');
    	cout << cmp3.max() << " is the Maximum of two characters." << endl;
    	cout << cmp3.min() << " is the Minimum of two characters." << endl;
    	return 0;
    }

    运行结果:

    展开全文
  • 第七章:C++类模板

    2019-11-19 21:43:08
    1、 下面类模板声明中, 正确的是() 。 A. template<typename T1,T2> B. template<class T1,T2> C. template<class T1,class T2> D. template<typename T1,typename T2> 选择C,D 2、 函数...

    一、问答题
    1、 下面类模板声明中, 正确的是() 。
    A. template<typename T1,T2>
    B. template<class T1,T2>
    C. template<class T1,class T2>
    D. template<typename T1,typename T2>
    选择C,D

    2、 函数模板和类模板有什么区别?
    函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中。

    函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

    二、编程题
    1、 设计一个函数模板, 实现求某个数值(整形或浮点型) 的绝对值。

    #include <iostream>
    using namespace std;
    
    template <typename T>
    T abs(T x){
        return (x > 0?x:-x);
    }
    
    int main() {
        cout << abs(-3)<< ","<<abs(-2.6)<<endl;
        return 0;
    }
    

    2、 设计一个函数模板, 实现对 T a[n] 进行排序,模板参数 T 可实例化为字符串、 整形、 浮点型。

    #include <iostream>
    #include <string>
    using namespace std;
    
    template <typename T>void sort(T*a, int n){
        int i, j;
        T t;
        for(i=0; i<n-1;i++){
            for(j=i; j<n-1; j++){
                if(a[i]>a[j]){
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
            }
        }
    }
    template <typename T>void print(T*a, int n){
        int i;
        for(i=0;i<n-1;i++){
            cout << a[i] << " ";
        }
        cout << endl;
    }
    
    int main() {
        string a[5] = {"zhang","li","qian","xu"};
        int Int[5] = {20, 12, 0, -5, 9};
        double Dou[5] = {3.07, 8.12, -0.45, 4.7};
        sort<string>(a,5);
        sort<int>(Int, 5);
        sort<double>(Dou, 5);
        print(a,5);
        print(Int, 5);
        print(Dou, 5);
        return 0;
    }
    

    3、 一个 Sample 类模板的私有成员为 T n, 要求在此类模板中设计一个operator == 重载运算符函数, 用于比较各个类对象的 n 是否相等。

    #include <iostream>
    #include <string>
    using namespace std;
    
    template <typename T>
    class Sample{
    public:
        Sample(T n):n(n){};
        bool operator ==(Sample &A);
    
    private:
        T n;
    };
    
    template <typename T>
    bool Sample<T>::operator ==(Sample &A){
        if(this->n == A.n){
            return true;
        }
        return false;
    }
    
    int main() {
        Sample<int>s1(2), s2(2);
        cout << (s1 == s2) << endl;
        Sample<string>s3("lisi"),s4("lisi");
        cout<<(s3==s4)<<endl;
        return 0;
    }
    
    
    展开全文
  • 1) 用List模板定义一个List类型的模板对象int_listB,从键盘读入m个整数,调用Push_back函数将这m个整数依次插入到该链表中;(4分) 2) 用List模板定义一个List类型的模板对象int_listC,从键盘读入n个整数,...
  • C++类模板实例化

    千次阅读 2021-09-04 13:32:18
    C++模板实例化 文章目录C++模板实例化1. 简介2. 模板实例化2.1 隐式实例化(Implicit instantiation)2.2 显示实例化(Explicit instantiation)2.3 模板中的静态成员 ...仅包含模板定义
  • c++模板声明与定义

    千次阅读 2020-12-23 20:38:54
    c++ 模板声明与定义 文章目录c++ 模板声明与定义前言模板实例化为什么C++编译器不能支持对模板的分离式编译重点C++模板代码的组织方式 ——包含模式(Inclusion Model) 前言 常遇到询问使用模板到底是否容易的问题...
  • 一、类模板定义及实例化 1. 定义一个模板: 1 templateclass 模板参数表> 2 3 class 类名{ 4 5 // 定义...... 6 7 };   其中,template 是声明模板的关键字,表示声明一个模板,模板...
  • 类模板

    2018-10-24 15:55:13
    文章目录类模板1,类模板定义说明:2,类模板的实例化3,类模板参数(1)非类型参数(2)默认模板参数 1,类模板定义 类模板是公共逻辑的抽象,通常用来作为容器或者行为的封装。 一般定义格式: template&...
  • 文章目录类模板定义格式使用模版构建动态顺序表类模板的实例化 类模板定义格式 template<class T1, class T2, ..., class Tn> class 类模板名 { // 内成员定义 }; template <class T> ...
  • C++之——类模板与函数模板用法

    千次阅读 2018-07-13 10:22:41
    类模板针对仅数据成员和成员函数类型不同的。 使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些类型无法实现...
  • C++函数模板模板函数)详解

    万次阅读 多人点赞 2019-07-04 16:03:01
    C++函数模板模板函数)详解定义用法:函数模板的原理延申用法2.1为什么需要类模板2.2单个类模板语法2.3继承中的类模板语法案例1:案例2:2.4类模板的基础语法2.5类模板语法知识体系梳理1.所有的类模板函数写在的...
  • 学习C++模板---模板类作为基类 使用模板类作为基类使用。 // 模板类-晋升.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <process.h> #include <...
  • 类模板三种类模板参数

    千次阅读 2018-04-22 10:40:47
    类模板三种类模板参数 实际上有三种类型模板参数:类型模板参数、模板模板参数(以模板作为模板的参数)、无类型模板参数。 &nbsp; 1、类型模板参数 类型模板参数是我们使用模板的主要目的。我们可以定义多个...
  • “通常情况下,你会在.h文件中声明函数和,而将它们的定义放置在一个单独的.cpp...这就是为什么所有的STL头文件都包含模板定义的原因。”[1] "标准要求编译器在实例化模板时必须在上下文中可以查看到其定义...
  • 【单选题】在Java语言中,以下哪个关键字用于在方法上声明抛出异常?【简答题】构造方法和普通的成员方法有什么区别?【单选题】请先阅读下面的代码 public class Test { public Test(){ System.out.println("构造方法...
  • 【单选题】定义必须包含在以下哪种符号之间?【多选题】下面对于构造方法的描述,正确有哪些?(多选)【填空题】Choose an acceptable verb form from the two given in brackets according to the standard of form...
  • C++类模板 template <class T> 详细使用方法

    万次阅读 多人点赞 2020-12-22 20:55:25
    类模板与函数模板定义和使用类似。 有时,有两个或多个,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个: class Compare_int { public : Compare(int a,int b) { x=...
  • 黑盒测试主要是为了发现以下错误: 1、是否有不正确或遗漏的功能? 2、在接口上,输入是否能正确的接受?能否输出正确的结果? 3、是否有数据结构错误或外部信息(例如数据文件)访问错误? 4、性能上是否能够满足要求...
  • (1)在讲模板之前,先闲扯一下吧: C++最重要的特性之一就是代码重用,为了实现代码重用,代码必须具有通用性。 通用代码不受数据类型的影响,并且可以自动适应数据类型的变化,这种程序设计类型称为参数化程序设计...
  • 模板及异常(小题)

    千次阅读 2020-06-27 17:07:31
    单选题: 2-1 现有声明: template class Test{...}; 则以下哪一个声明不可能正确。( A ) ...关于函数模板,描述错误的是。...A.函数模板必须由程序员实例化为可...一个类定义中,只要有一个函数模板,则这个类是类模板 D..
  • C++17之类模板参数类型推导指南

    千次阅读 2019-09-02 11:17:22
    您可以定义特定的推导指南来提供额外的或修正现有的类模板参数演绎。例如,您可以定义,每当推导出一个Pair3的类型时,类型推断的操作应该像类型将通过值传递一样: template<typename T1, typename T2> ...
  • C++模板正确写法

    千次阅读 2018-04-08 16:42:26
    我们写模板传统的写法是这个样子的: 1. 把的整个框架写在 .h 文件中。//注意此文件中要写上 头文件保护符 2. 把中所有接口的实现写在 .cpp 中。 3. 在 main() 中创建 女朋友 ,调用女朋友的各种接口。...
  • C++面向对象实现一个模板类链表

    千次阅读 2018-06-03 22:46:26
     请创建一个数据类型为T的链表类模板List,实现以下成员函数:1) 默认构造函数List(),将该链表初始化为一个空链表(10分) 2) 拷贝构造函数List(constList&lt;T&gt;&amp; list),根据一个给定的链表...
  • 1. 模板的概念。 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别...
  • C++——模板(超详细的模板解析)

    千次阅读 2022-03-28 17:29:35
    超详细的C++模板知识列表,持续维护。
  • 有 比可以围绕模板包装的泛型函数或要多得多。 我会说明他们。 从技术上讲,C ++模板和STL(标准模板库)是同级的。 在本文中,我只会介绍核心级别的模板。 本系列的下一部分将围绕模板介绍更高级和有趣的内容,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,402
精华内容 43,760
关键字:

以下类模板定义正确的是