gpt4 book ai didi

在结构上实现的 C++ 模板

转载 作者:行者123 更新时间:2023-11-28 08:21:02 25 4
gpt4 key购买 nike

此 C++ 代码有问题。我是用VC++6.0编译的。它给出错误“无法推断类型的模板参数”...问题出在 display 函数中。

代码如下:

#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

template <class type>
struct one
{
type data;
one *next;
};

one<int> *head, *temp, *mid, *del = NULL;

template <class type>
void athead(type value)
{
one *node = new one;
node->data = value;
node->next = head;
head = node;
}

template <class type>
void add_at_tail(type value)
{
one *node = new one;
node->data = value;
node->next = NULL;

if(head == NULL)
{
head = node;
temp = head;
}

while(temp->next != NULL)
{
temp = temp->next;
}

if(temp != node)
{
temp->next = node;
}
}

template <class type>
void display()
{
one<type> *temp = new one;
temp = head;
cout << "\n\n" << endl;
while(temp != NULL)
{
cout << " " << temp->data << " " << "->";
temp = temp->next;
}
cout << "\n\n\n";
}

int main()
{
int a, b, c;
cout << "Enter the data: " << endl;
cin >> a;
add_at_tail(a);
cout << "Enter the data: " << endl;
cin >> b;
add_at_tail(b);
cout << "Enter the data: " << endl;
cin >> c;
add_at_tail(c);

display();

return 0;
}

最佳答案

这里至少有几个问题:

首先,你已经定义了模板函数:

template<class type>
void display()
{
one<type> *temp=new one;
temp=head;
cout<<"\n\n"<<endl;
while(temp!=NULL)
{
cout<<" "<<temp->data<<" "<<"->";
temp=temp->next;
}
cout<<"\n\n\n";
}

这一行格式不正确,因为one不是一个完整的类型(one是一个类模板)

one<type> *temp=new one;

你需要这样做:

one<type> *temp=new one<type>;

然后在客户端代码中,您尝试像这样调用函数模板:

display();

但是 display 是一个没有参数的函数模板,所以编译器无法推断出它的模板参数 type 的类型。您必须在调用点指定 type 的类型。

display<int>();

display() 的实现也存在逻辑错误。您实例化了 one 的单个拷贝,但不对其进行初始化。然后您尝试像它是一个链表一样对其进行迭代,但它不是——它只是您刚刚创建的一些未初始化的节点。您可能希望传入您尝试迭代的链表。沿着这些线的东西:

template<class type>
void display(const one<type>& head)
{
one<type> const * temp = &head;
cout<<"\n\n"<<endl;
while(temp!=NULL)
{
cout<<" "<<temp->data<<" "<<"->";
temp=temp->next;
}
cout<<"\n\n\n";
}

既然 display 接受了模板中提到的参数,编译器就能够推断出它的类型。你可能想这样调用它:

display(head);

关于在结构上实现的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com