2012-01-22 13 views
3

このような一般的な質問は嫌ですが、次のコードは明示的なテンプレートの特殊化の練習です。専門のコンストラクタの実装がないテンプレートです明示的なテンプレートの特殊化

c:\users\***\documents\visual studio 2010\projects\template array\template array\array.h(49): error C2910: 'Array::{ctor}' : cannot be explicitly specialized

#ifndef ARRAY_H 
#define ARRAY_H 

template <typename t>` 
class Array 
{ 
public: 
Array(int); 

int getSize() 
{ 
    return size; 
} 
void setSize(int s) 
{ 
    size = s; 
} 
void setArray(int place, t value) 
{ 
    myArray[place] = value; 
} 
t getArray(int place) 
{ 
    return myArray[place]; 
} 
private: 
    int size; 
    t *myArray; 
}; 

template<typename t> 
Array<t>::Array(int s=10) 
{ 
    setSize(s); 
    myArray = new t[getSize()]; 
} 

template<> 
class Array<float> 
{ 
public: 
    Array(); 
}; 

template<> 
Array<float>::Array() 
{ 
    cout<<"Error"; 
} 

#endif 

おかげ

答えて

5

:私はエラーを得続けます!それはあなただけ書きたい、次のとおりです。

Array<float>::Array() 
{ 
    std::cout << "Error"; 
} 

実際に、あなたがあなただけにお勧めします、その場合には「フロート」で使用されていないためにあなたの「アレイ」クラステンプレートの使用を制限したいようです宣言なくあなたはコンパイル時にエラーに実行時エラーをオンにする専門定義:もちろん

template <> class Array<float>; 

、あなたはクラスのインスタンス化を防ぐことができますどのように多くのバリエーションがあります。しかし、実行時エラーの作成は最悪の選択肢です。

+0

私はまだ問題を抱えています...コード全体はどのように見えるでしょうか? – David

+0

' :: Array()'の前にある 'template <>'を削除します。他のエラーはこの特定の問題とは関係がありません: '#include 'と 'using namespace std;'を追加する必要があり、テンプレートの 'Array'コンストラクタの_definition_からデフォルトの引数を削除する必要がありました。 _宣言_)。これらの変更により、g ++、clang、EDGのフロントエンドを使用して私のためにコンパイルされます。 –

+0

助けてくれてありがとう! – David

関連する問題