Re: Template return an error message
"Jodie" <Jodie@discussions.microsoft.com> wrote in message
news:5029D584-7C75-4A1E-8872-39435FCDAF76@microsoft.com
I have the following codes:
#include "stdafx.h"
#include <iostream>
#include "stack.h"
using namespace std ;
//base template class
template<typename T1, typename T2>
class X
{
X(T1 myT1 ,T2 myT2) { cout << "Constructor X"<< endl ;}
} ;
//partial specialization
template<typename T1>
class X<T1, int>
{
public:
X (T1 myT1, int iValue) { cout << "Constructor X specialization "<<
endl ;} } ; //C2989 here
Are you using VC6, by any chance? VC6 doesn't support partial
specialization.
int main()
{
// generates an instantiation from the base template
X<char, char> xcc ;
//generates an instantiation from the partial specialization
X<char, int> xii ;
return 0 ;
}
The compilation return errores as following:
Error 1 error C2512: 'X<T1,T2>' : no appropriate default constructor
available d:\test.cpp 25
Error 2 error C2512: 'X<T1,T2>' : no appropriate default constructor
available d:\test.cpp 28
What are wrong with these codes. Why there are compilation errors.
Which part of "no appropriate default constructor" do you find difficult
to understand? You are trying to instantiate objects without passing any
parameters. That requires a default constructor (a constructor that can
be called with no parameters), but your classes don't provide any. They
only provide a constructor taking two parameters, and an implicitly
defined copy constructor taking one parameter.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925