加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

模板(C) – 不确定是否正确

发布时间:2020-12-16 07:30:48 所属栏目:百科 来源:网络整理
导读:我是一名学生,我正在为C中的数组做一个静态库,所以我不必每次都在课程中重写代码. 我在中学读第二年,所以我不是专家. 我希望我的代码与所有类型(int,float,ecc.)兼容,但我遇到了一些麻烦. 你能看看我的代码吗? // slarray.h#if !defined _SLARRAY_#define _
我是一名学生,我正在为C中的数组做一个静态库,所以我不必每次都在课程中重写代码.

我在中学读第二年,所以我不是专家.
我希望我的代码与所有类型(int,float,ecc.)兼容,但我遇到了一些麻烦.

你能看看我的代码吗?

// slarray.h
#if !defined _SLARRAY_
#define _SLARRAY_

template <typename Tipo> class Array {
  public:
    void inserisci();
    void visualizza();
    void copia(Tipo*);
    Array(short);
    ~Array();
  private:
    Tipo* ary;
    short* siz;
};

#endif
// slarray.cpp   
#include <iostream>
#include "slarray.h"

unsigned short i;
unsigned short j;

template <typename Tipo> void Array<Tipo>::inserisci() {
  for (i = 0; i < *siz; i++) {
    std::cout << i << ": ";
    std::cin  >> ary[i];
  }
}
template <typename Tipo> void Array<Tipo>::visualizza() {
  for (i = 0; i < *siz; i++) {
    std::cout << ary[i] << " ";
  }
}
template <typename Tipo> void Array<Tipo>::copia(Tipo* arycpy) {
  for (i = 0; i < *siz; i++) {
    *(arycpy + i) = ary[i];
  }
}
template <typename Tipo> Array<Tipo>::Array(short n) {
  siz = new short;
  *siz = n;
  ary = new Tipo[n];
}
template <typename Tipo> Array<Tipo>::~Array() {
  delete[] ary;
  delete siz;
}

当我尝试使用以下方法对类进行初始化时,代码会给出错误:

Array <int> vct(5);

解决方法

模板实现需要对专门化它们的翻译单元可见.

将实现从cpp移动到头文件.

其他几点说明:

> unsigned short i; unsigned short j;应该是本地的,没有必要将它们作为全局变量.
>以_开头后跟大写字母的宏被保留,因此_SLARRAY_是非法的,重命名它.
>实现赋值运算符和复制构造函数,否则所有复制都将变浅.

我假设你不能使用std,否则你知道容器已经存在了,对吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读