"Victor Bazarov" <v.********@comAcast.netwrote in message
news:D_******************************@comcast.com. ..
AlanJSmith wrote:
>I am converting some C++ projects from 6 to vs2005 in one of the
headers i have the code that follows this passage in which I get an
error saying int default cant be assumed so i added DBString<nSize>
DBString<nSize>:: to the copy assignment same size oporator and this
seems to work, if i try the same thing with copy assignment different
sizes i get error C3856: 'DBString<nSize>::=': class is not a class
template and adding any type between template<int nInSize and
operator = without the DBString<nSize>:: gives me a c++ optimizer had
to close send error report to microsoft error. I have been searching
for an answer for a couple of hours now can any one help please.
This seems to fall under FAQ 5.8. Please take time to read it before
your next post.
>>
template<int nSizeclass DBString
{
public:
...........
// copy assignment (different size)
template<int nInSizeoperator =(const DBString<nInSize>& strNewValue)
{
strncpy((char*)strValue,(char*)strNewValue.strValu e,nInSize);
There seems to be no check if 'nInSize' is greater than nSize, which
might present a problem, IME...
> nIndicator = strNewValue.nIndicator;
}
// copy assignment (same size)
DBString<nSizeDBString<nSize>::operator =(const DBString<nSize>&
strNewValue)
{
strncpy((char*)strValue,(char*)strNewValue.strValu e,nSize);
nIndicator = strNewValue.nIndicator;
}
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Ok you were right i didnt read the faq's so here it is as a complete
compilable unit, I turned off precompiled headers and common lanuage runtime
support.
template<int nSizeclass DBString
{
public:
// Indicates status of string, eg. length, NULL
long nIndicator;
// array of characters of appropriate length holds actual data
unsigned char strValue[((nSize/4)%4==0)? nSize : (nSize/4)*4];
template<int nInSizeoperator =(const DBString<nInSize>& strNewValue)
{
_strncpy_s((char*)strValue,nSize,(char*)strNewValu e.strValue,nInSize);
}
// copy assignment (same size)
DBString<nSizeDBString<nSize>::operator =(const DBString<nSize>&
strNewValue)
{
_strncpy_s((char*)strValue,nSize,(char*)strNewValu e.strValue,nSize);
nIndicator = strNewValue.nIndicator;
}
};
I have corrected the prob with nSize and nInSize as suggested but i knew i
would have to do that. the prob isnt with the content of the overloaded
operators but the syntax of the decaration which causes me this error when
trying to compile.
\DBString.cpp(12) : error C4430: missing type specifier - int assumed. Note:
C++ does not support default-int
1.\DBString.cpp(24) : see reference to class template instantiation
'DBString<nSize>' being compiled
obviously i have tried lots of variations on the syntax but i am still
flummoxed, there is the chance that what i am trying to do is not allowed in
VS2005 but i am not sure.