2012-01-22 2 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