Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > a compiler error in template function default argument value

Reply
Thread Tools

a compiler error in template function default argument value

 
 
kuangye
Guest
Posts: n/a
 
      04-10-2008
Hi, all.
I encounter a compiler error in gcc 3.4.
Is there anyone encounter the some situation. And why ???
/////////////////////////////////////
#include <iostream>
using namespace std;


#define INT_ID 1
#define FLOAT_ID 2
#define CHAR_ID 3

template<int tid>
struct Tid2T{};

#define TID2T_HELPER(id, type)\
template<>\
struct Tid2T<id>{\
typedef type TyT;\
};

TID2T_HELPER(INT_ID, int)
TID2T_HELPER(FLOAT_ID, float)
TID2T_HELPER(CHAR_ID, char)


template<int tid>
class TS{
public:
typename Tid2T<tid>::TyT m_i;
TS(typename Tid2T<tid>::TyT val):TS_ID(tid){
m_i = val;
}
const int TS_ID;
};

template<typename Elt>
class TV;

//
//If i define the default value here, then the program will be ok.
//
template<typename Elt>
void fn(const TV<Elt>& v1, const Elt& s1/*=Elt(0)*/);


template<typename Elt>
class TV{
public:
TV(const Elt& e):TV_TS_ID(e.TS_ID){
}
const int TV_TS_ID;
};


//
//If i define the default value here, then the compiler error will
appear
//
template<typename Elt>
void fn(const TV<Elt>& v1, const Elt& s1 = Elt(0))
{
cout<<"TV_TS_ID="<<v1.TV_TS_ID<<" TS_ID="<<s1.TS_ID<<endl;
}

template<typename T>
void tryfn()
{
T e1(1);
TV<T> v1(e1);

//the following calling is error
//why???
fn(v1);

//the following calling is ok
//fn(v1, e1);
}


int main()
{
tryfn< TS<INT_ID> >();
tryfn< TS<FLOAT_ID> >();
tryfn< TS<CHAR_ID> >();

return 0;
}
 
Reply With Quote
 
 
 
 
kuangye
Guest
Posts: n/a
 
      04-10-2008
Compiling source file(s)...
1.cpp
1.cpp: In function `void tryfn() [with T = TS<1>]':
1.cpp:74: instantiated from here
1.cpp:63: error: no matching function for call to `fn(TV<TS<1> >&)'
1.cpp: In function `void tryfn() [with T = TS<2>]':
1.cpp:75: instantiated from here
1.cpp:63: error: no matching function for call to `fn(TV<TS<2> >&)'
1.cpp: In function `void tryfn() [with T = TS<3>]':
1.cpp:76: instantiated from here
1.cpp:63: error: no matching function for call to `fn(TV<TS<3> >&)'
 
Reply With Quote
 
 
 
 
Barry
Guest
Posts: n/a
 
      04-10-2008
On 4月10日, 上午9时05分, kuangye <(E-Mail Removed)> wrote:
> Hi, all.
> I encounter a compiler error in gcc 3.4.
> Is there anyone encounter the some situation. And why ???
> /////////////////////////////////////
> #include <iostream>
> using namespace std;
>
> #define INT_ID 1
> #define FLOAT_ID 2
> #define CHAR_ID 3
>
> template<int tid>
> struct Tid2T{};
>
> #define TID2T_HELPER(id, type)\
> template<>\
> struct Tid2T<id>{\
> typedef type TyT;\
>
> };
>
> TID2T_HELPER(INT_ID, int)
> TID2T_HELPER(FLOAT_ID, float)
> TID2T_HELPER(CHAR_ID, char)
>
> template<int tid>
> class TS{
> public:
> typename Tid2T<tid>::TyT m_i;
> TS(typename Tid2T<tid>::TyT val):TS_ID(tid){
> m_i = val;
> }
> const int TS_ID;
>
> };
>
> template<typename Elt>
> class TV;
>
> //
> //If i define the default value here, then the program will be ok.
> //
> template<typename Elt>
> void fn(const TV<Elt>& v1, const Elt& s1/*=Elt(0)*/);


add default parameter in declaration
NOT in your definition

so

template<typename Elt>
void fn(const TV<Elt>& v1, const Elt& s1 = Elt(0));

>
> template<typename Elt>
> class TV{
> public:
> TV(const Elt& e):TV_TS_ID(e.TS_ID){
> }
> const int TV_TS_ID;
>
> };
>
> //
> //If i define the default value here, then the compiler error will
> appear
> //
> template<typename Elt>
> void fn(const TV<Elt>& v1, const Elt& s1 = Elt(0))
> {
> cout<<"TV_TS_ID="<<v1.TV_TS_ID<<" TS_ID="<<s1.TS_ID<<endl;
>
> }
>


remove default parameter here. (const Elt& s1 /* = Elt(0) */ as you
did before)

Actually, there's nothing special in this "templated" case.



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Template argument as template argument nw C++ 0 04-14-2008 01:36 PM
What value should be passed to make a function use the default argument value? LaundroMat Python 50 10-14-2006 05:11 AM
Passing pointer to template function as argument to pointer to template function Vijai Kalyan C++ 4 11-08-2005 07:53 PM
compiler error: argument of type "VALUE *" is incompatible with parameter of type "VALUE" me2faster@excite.com Ruby 1 05-05-2005 11:23 PM
Template function as argument to another template function Jim West C++ 3 10-07-2004 07:21 PM



Advertisments