这里似乎有一些类似的问题虽然没有一个有效地工作(至少使用我的实现。)我希望我能得到一些有关我为什么会收到以下错误的见解:
从char转换为char * [-f permissive]
无效转换
#include <ctime>
#include <iostream>
#include "SLList.h"
using namespace std;
int main() {
SLList *newNode;
char name;
int id;
newNode = new SLList;
for( int a = 0; a < 2; a++ )
{
cout << "Type a name: ";
cin >> name;
cout << endl << "Type an integer id: ";
cin >> id;
newNode->insertFirst(name,id);
}
newNode->print();
}
我的课程如下:
SLList::SLList()
{
first = NULL;
last = NULL;
count = 0;
}
void SLList::print()
{
cout << "List count: " << count <<endl;
node *temp;
temp = first;
while(temp != NULL)
{
cout <<"Name = " <<temp->name <<endl;
cout <<"ID = " <<temp->id <<endl;
cout <<"======================" <<endl;
temp = temp->next;
}
}
void SLList::insertFirst(char *name, int id)
{
node *newNode;
newNode = new node;
assert (newNode != NULL);
newNode->name = name;
newNode->id = id;
newNode->next = first;
first = newNode;
if(last == NULL)
last = newNode;
count++;
}
当我使用name&amp;运行主代码时在insertFirst(&amp; name,id)下;
代码运行(不是预期的)但它至少编译,但名称最终对每个代码都相同。我对指针很新,但希望得到一些帮助。
感谢。
答案 0 :(得分:0)
这一行: newNode-&gt; name = name; 是问题。
我猜你可能想要的不是单个字符,而是名字的字符串。在这种情况下,您要做的是用以下代码替换该行:
strcpy(newNode.name, name);
(别忘了做#include cstring)
现在,请确保您查看strcpy文档并了解它所采用的两个参数及其返回的内容。确保只传递strcpy空终止的c-strings。
这没关系:
char name[6];
strcpy(name, "Grace"); //the compiler makes sure this c string "Grace" has a null terminator
这不行:
char* name1; //never assigned
char* name2; //never assigned
strcpy(name1, name2); //strcpy would just copy on into space until it found a null character
您可能会收到警告strcpy已弃用,您可以看到该警告here。但我猜这是针对学校的,所以你可以安全地推迟这样的安全问题,因为黑客可能并不关心你的家庭作业。不推荐使用意味着该功能的新版本已经发布,不建议再使用它了。
现在,我们来谈谈您收到的错误消息: 从char到char *的无效转换
newNode->name; //evaluates to a char.
name; //evaluates to a char pointer.
newNode->name = name // is a type mismatch because char != char*
如果不是复制整个字符串,如果你真的只想要一个字符,那么你可以这样做:
newNode.name = name
或
newNode->name = *name
- &gt;是一个取消引用给它的指针的运算符。 你也可以取消引用这样的指针:* name。
执行此操作:newNode-&gt; name与执行相同的操作:newNode。* name