C++ 将cstring类型的模板用作非模板类中的数据成员
这是一个复杂的问题C++ 将cstring类型的模板用作非模板类中的数据成员,c++,templates,C++,Templates,这是一个复杂的问题 class Stats { public: Stats(); // some functions QuadraticHashTable<char[4]> teamHash; }; 由于需求,我必须使用模板quadrachicashtable来存储c样式的字符串,并且我必须在类Stats中定义一个quadrachicashtable类型的数据成员,它不是模板 有人能告诉我我的申报有什么问题吗?编译器一直告诉我 调用“quadrachic
class Stats {
public:
Stats();
// some functions
QuadraticHashTable<char[4]> teamHash;
};
由于需求,我必须使用模板quadrachicashtable来存储c样式的字符串,并且我必须在类Stats中定义一个quadrachicashtable类型的数据成员,它不是模板
有人能告诉我我的申报有什么问题吗?编译器一直告诉我
调用“quadrachicashtable::quadrachicashtable”时没有匹配的函数
顺便说一句,我还没有在Stat的构造函数中初始化数据成员
多谢各位
二次表代码
template <class HashedObj>
class QuadraticHashTable
{
public:
explicit QuadraticHashTable( const HashedObj & notFound, int size = 101 );
QuadraticHashTable( const QuadraticHashTable & rhs )
: array( rhs.array), ITEM_NOT_FOUND( rhs.ITEM_NOT_FOUND ),
currentSize( rhs.currentSize ) { }
const HashedObj & find( const HashedObj & x ) const;
void makeEmpty( );
void insert( const HashedObj & x );
void remove( const HashedObj & x );
const QuadraticHashTable & operator=( const QuadraticHashTable & rhs );
enum EntryType { ACTIVE, EMPTY, DELETED };
/////////////////////////////////////////////////////
friend class Stats;
/////////////////////////////////////////////////////
private:
struct HashEntry
{
HashedObj element;
EntryType info;
HashEntry( const HashedObj & e = HashedObj( ), EntryType i = EMPTY )
: element( e ), info( i ) { }
};
vector<HashEntry> array;
int currentSize;
const HashedObj ITEM_NOT_FOUND;
bool isPrime( int n ) const;
int nextPrime( int n ) const;
bool isActive( int currentPos ) const;
int findPos( const HashedObj & x ) const;
int hash( const string & key, int tableSize ) const;
int hash( int key, int tableSize ) const;
void rehash( );
};
该类没有默认构造函数。每当类有一个没有默认构造函数的成员时,在构造对象时必须显式调用非默认构造函数。如果成员具有默认的无参数读取构造函数,则默认情况下会调用它 例如,以下内容重新创建了您的问题
template <class T>
class Member
{
public:
Member(T obj)
:m_obj(obj)
{
}
private:
T m_obj;
};
class Owner
{
public:
Owner()
{
}
private:
Member<int> m_member;
};
在VS中,我得到了一个稍微清晰一些的错误消息error'Member':没有合适的默认构造函数可用,但同样的问题是编译器不知道如何在此上下文中构建成员,因为您没有告诉它如何构建它
如果在初始化期间更改Owner类以调用相应的构造函数,编译器现在知道如何构造对象
class Owner
{
public:
Owner()
:m_member(4)
{
}
private:
Member<int> m_member;
};
我们需要quadrachicashtable的头代码来帮助您。我认为它没有问题,因为它是教授提供的模板代码。该类是否有默认构造函数quadrachicashtable是Stat类有默认构造函数,但可以修改。你知道我申报的问题吗?非常感谢,重播。我只是通过将数据成员teamTable作为指向quadrachichashtable的指针来修复它。但是这里还有一个问题,这就是为什么我说它有点复杂。由于模板的类型名为,我不知道如何在Stat构造函数中初始化数据成员teamHash。在Stat构造函数中,我使用teamHash=new QudraticHashTable'\0',30;notfound变量总是会带来一些麻烦。我不知道该怎么修。