【问题标题】:Error C2440 initializing cannot convert void to typ错误 C2440 初始化无法将 void 转换为 typ
【发布时间】:2016-04-21 00:26:19
【问题描述】:
#include <stdlib.h>
#include <stdio.h>
// self - referential structure
struct listNode {
char data; // each listNode contains a character
struct listNode *nextPtr; //pointer to next node
};

typedef struct listNode ListNode;  // synonym for struct listNode
typedef ListNode *ListNodePtr; // synonym for struct listnode*



void insert(ListNodePtr *sPtr, char value)
{
ListNodePtr newPtr = malloc(sizeof(ListNode)); // create node

if (newPtr != NULL) // is space availale?
{
    newPtr->data = value; // place value in node
    newPtr->nextPtr = NULL; // node does not link to another node

     ListNodePtr previousPtr = NULL;
    ListNodePtr currentPtr = *sPtr;

    // loop to find the correct location in the list
     while (currentPtr != NULL && value > currentPtr->data)
     {
        previousPtr = currentPtr; // walk to...
         currentPtr = currentPtr->nextPtr; // ... next node
     }

    if (previousPtr == NULL) // insert new node at beginning of list
     {
        newPtr->nextPtr = *sPtr;
        *sPtr = newPtr;
    }
    else
    {
        previousPtr->nextPtr = newPtr;
        newPtr->nextPtr = currentPtr;
    }
}

else 
{
    printf("%c not inserted. No memory available. \n", value);
}
}

这是我的功能,问题发生在一行中 “ListNodePtr newPtr = malloc(sizeof(ListNode));” 它说 Cannoy 将 void 转换为 ListNotePtr 然后它说 IntelliSense:“void *”类型的值不能用于初始化“ListNodePtr”类型的实体

我有点困惑,因为我直接从我的演讲幻灯片中复制了这个功能,但我似乎无法让它工作。有人知道发生了什么吗?此函数和其他函数在 main(void) 中调用。 提前谢谢!

【问题讨论】:

  • 你是不是偶然编译成C++?
  • 我似乎在使用 C++ 编译器作为 C 编译器。更改选项(使用 C)或使用 cast。
  • 我正在使用 Visual Studio 2013,但可能就是这样。我制作了一个 cpp 文件而不是 .c
  • 它仍然抛出同样的错误:/
  • 实际上,我在一个新项目中重复了这个实验(这样我可以确保我使用的是 C 而不是 C++)并且它成功了!谢谢!

标签: c malloc structure


【解决方案1】:

您似乎将 void 类型值分配给 ListNodePtr 变量。 如果您使用 C++ 编译器进行编译,则需要执行显式转换:

void insert(ListNodePtr *sPtr, char value)
{
    ListNodePtr newPtr = (ListNodePtr)malloc(sizeof(ListNode));
// ...

这里有一个类似的问题:https://stackoverflow.com/a/15106036/5810934

【讨论】:

    【解决方案2】:

    这很有希望

    ListNodePtr* newPtr = static_cast<ListNodePtr*>(malloc(sizeof(ListNode));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 2021-08-24
      • 2018-08-23
      相关资源
      最近更新 更多