I would like compile c++ standard code on microsoft visual studio
2005.Code compile on borland builder 6.

template <typename T>
class MultiBaseNumber
{
public:
typedef T Type;

MultiBaseNumber(); //ctor
MultiBaseNumber(Type in_val); //ctor

Type Val() const;
bool IsValid() const;

private:
bool m_isValid;
Type m_val;
};//cl

template <typename T>
MultiBaseNumber<T>::MultiBaseNumber()
: m_isValid(false)
, m_val(0)
{;} //ctor

template <typename T>
MultiBaseNumber<T>::MultiBaseNumber(MultiBaseNumber<T>::Type in_val)
: m_isValid(true)
, m_val(in_val)
{;} //ctor

template <typename T>
MultiBaseNumber<T>::Type
MultiBaseNumber<T>::Val() const
{
return m_val;
}//mt

template <typename T>
bool
MultiBaseNumber<T>::IsValid() const
{
return m_isValid;
}//mt

//---


when try to compile I get these errors:

error C2061: syntax error : identifier 'Type'
error C2995: 'Ut::MultiBaseNumber<T>::MultiBaseNumber(void)' :
function template has already been defined
error C2143: syntax error : missing ';' before
'Ut::MultiBaseNumber<T>::Val'
error C4430: missing type specifier - int assumed. Note: C++ does not
support default-int
error C2888: 'MultiBaseNumber<T>::Type Type' : symbol cannot be
defined within namespace 'Ut'

please help me.

Re: compilation problem by David

David
Thu Jan 10 06:00:28 CST 2008

alessio211734@yahoo.it wrote:
> I would like compile c++ standard code on microsoft visual studio
> 2005.Code compile on borland builder 6.
>
> template <typename T>
> class MultiBaseNumber
> {
> public:
> typedef T Type;
>
> MultiBaseNumber(); //ctor
> MultiBaseNumber(Type in_val); //ctor
>
> Type Val() const;
> bool IsValid() const;
>
> private:
> bool m_isValid;
> Type m_val;
> };//cl
>
> template <typename T>
> MultiBaseNumber<T>::MultiBaseNumber()
> : m_isValid(false)
> , m_val(0)
> {;} //ctor
>
> template <typename T>
> MultiBaseNumber<T>::MultiBaseNumber(MultiBaseNumber<T>::Type in_val)
> : m_isValid(true)
> , m_val(in_val)
> {;} //ctor
>
> template <typename T>
> MultiBaseNumber<T>::Type
> MultiBaseNumber<T>::Val() const
> {
> return m_val;
> }//mt
>
> template <typename T>
> bool
> MultiBaseNumber<T>::IsValid() const
> {
> return m_isValid;
> }//mt
>
> //---
>
>
> when try to compile I get these errors:
>
> error C2061: syntax error : identifier 'Type'
> error C2995: 'Ut::MultiBaseNumber<T>::MultiBaseNumber(void)' :
> function template has already been defined
> error C2143: syntax error : missing ';' before
> 'Ut::MultiBaseNumber<T>::Val'
> error C4430: missing type specifier - int assumed. Note: C++ does not
> support default-int
> error C2888: 'MultiBaseNumber<T>::Type Type' : symbol cannot be
> defined within namespace 'Ut'

Alessio:

The code compiles on online Comeau, so it's probably correct.

But what is Ut:: in your error messages? I do not see this namespace in
your code.

--
David Wilkinson
Visual C++ MVP

Re: compilation problem by Igor

Igor
Thu Jan 10 07:52:47 CST 2008

<alessio211734@yahoo.it> wrote in message
news:123cd07c-9faa-47e2-a940-d01c07b26770@f3g2000hsg.googlegroups.com
> I would like compile c++ standard code on microsoft visual studio
> 2005.Code compile on borland builder 6.
>
> template <typename T>
> class MultiBaseNumber
> {
> public:
> typedef T Type;
>
> MultiBaseNumber(); //ctor
> MultiBaseNumber(Type in_val); //ctor
>
> Type Val() const;
> bool IsValid() const;
>
> private:
> bool m_isValid;
> Type m_val;
> };//cl
>
> template <typename T>
> MultiBaseNumber<T>::MultiBaseNumber(MultiBaseNumber<T>::Type in_val)

Should be

template <typename T>
MultiBaseNumber<T>::MultiBaseNumber(typename MultiBaseNumber<T>::Type
in_val)

MultiBaseNumber<T>::Type being a dependent name.

> template <typename T>
> MultiBaseNumber<T>::Type
> MultiBaseNumber<T>::Val() const

Should be

template <typename T>
typename MultiBaseNumber<T>::Type
MultiBaseNumber<T>::Val() const

> when try to compile I get these errors:
>
> error C2061: syntax error : identifier 'Type'

You chose to omit the tell-tale warning that comes before all these
errors:

warning C4346: 'MultiBaseNumber<T>::Type' : dependent name is not a type
prefix with 'typename' to indicate a type

Which part of this is unclear?
--
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