我已经被分配将我的链表类变成一个模板,我陷入了困惑。我需要将其作为单个.h文件提交。

当我尝试构建时,每次提及LLnodefwdPtrtheData时都会出错。那是结构的每个元素,所以我在那做错了。另外,struct定义本身也带有syntax error标记

template <class V>
class LL
{
    private:
        LLnode * header;
        struct <V> LLnode;
        {
            LLnode * fwdPtr; // has a pointer member
            V theData; // the data within the node
        };

    public:
        LL()
            {
                header = nullptr;
            }
        void push_front(string data)
        {
            LLnode * new_node;
            new_node = new LLnode;
            new_node -> theData = data;

            if (header == nullptr)
            {
                header = new_node;
                new_node -> fwdPtr = nullptr;
            }
            else
            {
                LLnode * temp;
                temp = header;
                header = new_node;
                new_node -> fwdPtr = temp;
            }

            return;
        }
        .... more functions below ....

main()中,将在其上测试功能,将实例化一个新的链表,并将<string>强制转换为类型。这就是为什么我将struct LLnode移到privateclass LL成员部分内的原因。这也是为什么我在整个结构中都使用V的原因。因为该转换需要深入到结构本身,所以当我为节点动态分配内存时,它将知道接受string数据

我知道我将需要更改函数定义以包括V并在整个变量中使用V。但是我不知道在哪里以及为什么。我对模板类如何与指针和程序员定义的结构相关感到困惑。我了解我的教科书中模板类/函数的简单示例,但在这里迷路了。

在此先感谢您的帮助!

编辑:这是我收到的错误消息(按要求)
../LL_template_class.h:23:3: error: unknown type name 'LLnode'
                LLnode * header;
                ^
../LL_template_class.h:24:3: error: declaration of anonymous struct must be a definition
                struct <V> LLnode;
                ^
../LL_template_class.h:24:3: warning: declaration does not declare anything [-Wmissing-declarations]
../LL_template_class.h:25:3: error: expected member name or ';' after declaration specifiers
                {
                ^
../LL_template_class.h:37:4: error: unknown type name 'LLnode'
                        LLnode * new_node;
                        ^
../LL_template_class.h:38:19: error: unknown type name 'LLnode'
                        new_node = new LLnode;
                                       ^
../LL_template_class.h:48:5: error: unknown type name 'LLnode'
                                LLnode * temp;

但是就像我说的那样,我在提及can not resolve元素时也遇到了struc LLnode错误

最佳答案

两个问题:

首先,您过早结束对struct LLnode的声明(您有多余的分号)。你有

struct LLnode;
{
...
};

你应该有
struct LLnode
{
...
};

其次,当您需要声明struct <V> LLnode时,您将获得声明struct LLnode。那里的<V>没有句法意义。

另外,我不确定是否需要这样做,但是您可能需要将header声明移至LLnode声明下方,因为header定义为LLnode

关于c++ - 如何在所有内联类中创建数据结构模板(相同的.h文件),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58142037/

10-12 17:38