fndef FIXED_LENGTH_STRING_H
#define FIXED_LENGTH_STRING_H
#include <iostream>
using namespace std;
#include <string.h>
template <int Length>
class FixedLengthString
{
public:
enum Exceptions {InvalidLength};
FixedLengthString ();
FixedLengthString (const FixedLengthString <Length> &);
FixedLengthString (const char []);
~FixedLengthString ();
Copy (const FixedLengthString <Length> &);
Copy (const char []);
istream & Read ();
FixedLengthString <Length> & operator = (const FixedLengthString <Length> &);
FixedLengthString <Length> & operator = (const char []);
bool operator < (const FixedLengthString <Length> &) const;
bool operator < (const char []) const;
// also need the other comparison operators
operator const char * () const;
private:
char Data [Length + 1];
};
template <int Length>
ostream & operator << (ostream & out, const FixedLengthString <Length> & Str)
{
// display the characters in the string
return out;
}
template <int Length>
istream & operator >> (istream & in, FixedLengthString <Length> & Str)
{
Str.Read ();
return in;
}
template <int Length>
FixedLengthString <Length>::FixedLengthString (const char S [])
{
if (Length != strlen (S))
throw InvalidLength;
else
strcpy (Data, S);
}
template <int Length>
inline FixedLengthString <Length>::operator const char * () const
{
return Data;
}
#endif
编译器指向两个Copy构造函数。我正在创建一个模板,其中包含字符数作为模板参数。从这里我需要一个固定长度的字符串
在我的FixedLengthString.cpp文件中,我有这个
FixedLengthString<Length>::Copy(const FixedLengthString <Length> & M)
{
strcpy(Data, M.Data)
}
template <int Length>
FixedLengthString<Length>::Copy(const char M [])
{
strcpy(Data, M.Data)
}
答案 0 :(得分:1)
您只有一个复制构造函数,因为只能有一个。
但是你忘记了返回类型 - void
看似合理 - 在你的两个名为“复制”的函数上,所以我怀疑你指的是那些。
但它们不是构造函数,只是常规函数。
并且您不能在单独的文件中使用模板函数实现,您必须将它们放在标题中。