我已经被分配将我的链表类变成一个模板,我陷入了困惑。我需要将其作为单个.h
文件提交。
当我尝试构建时,每次提及LLnode
,fwdPtr
和theData
时都会出错。那是结构的每个元素,所以我在那做错了。另外,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
移到private
的class 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/