Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将cstring类型的模板用作非模板类中的数据成员_C++_Templates - Fatal编程技术网

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变量总是会带来一些麻烦。我不知道该怎么修。