4

私は学生で、C ++の配列用の静的ライブラリを使用しているので、レッスン中に毎回コードを書き直す必要はありません。

私は中学2年生なので、専門家ではありません。コードをすべてのタイプ(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);
4

1 に答える 1

2

テンプレートの実装は、それらを専門とする翻訳ユニットに表示される必要があります。

実装をからヘッダーファイルに移動しますcpp

他のいくつかの注意:

  • unsigned short i;unsigned short j;ローカルにする必要があります。グローバル変数として持つ必要はありません。

  • 大文字で始まり_大文字が続くマクロは予約されているため、_SLARRAY_違法です。名前を変更してください。

  • 代入演算子とコピーコンストラクターを実装します。そうしないと、すべてのコピーが浅くなります。

使用できないとstd思いますが、そうでなければ、コンテナがすでに存在していることに気づいていますよね?

于 2012-05-25T18:23:21.053 に答える