C ++转换错误:从short int *到short int的无效转换

时间:2014-06-29 15:46:59

标签: c++

我遇到转换错误,实际上不知道如何修复它。

我必须使用这些结构,并且不知道如何访问Date结构权限。 这是我的代码:

#include <iostream>
#include <string.h>

using namespace std;


struct Date {
 short year;
 short month;
 short day;
};

struct Stuff {
  Date birth;
};

struct ListElement {
  struct Stuff* person;          // Pointer to struct Stuff 
  struct ListElement* next;      // Pointer to the next Element
};

int main() {
 short birth_year;
 short birth_month;
 short birth_day;
 cin >> birth_year;
 cin >> birth_month;
 cin >> birth_day;


 ListElement* const start = new ListElement();
 ListElement* actual = start;

 actual->person = new Stuff();
 actual->person->birth.year = new short[sizeof(birth_year)]; // Conversion Error

delete start;
delete actual;
}

来自GCC的错误消息:

main.cpp: In function 'int main()':
main.cpp:35:29: error: invalid conversion from 'short int*' to 'short int' [-fpermissive]
  actual->person->birth.year = new short[sizeof(birth_year)]; // Conversion Error

3 个答案:

答案 0 :(得分:3)

您无法为actual->person->birth.year分配内存,因为birth.year不是指针。

您可以使用:actual->person->birth.year = 2014;
actual->person->birth.year = birth_year;

答案 1 :(得分:2)

我认为你真正想做的是:

actual->person->birth.year = birth_year;

如果我错了,请阅读以下内容:

你的结构中有:

short year;

但您尝试将新回复分配给year

你应该这样做short* year;并动态处理它(永远不要忘记取消分配它)!

答案 2 :(得分:1)

yearshort,是Date的直接成员。也就是说,如果您创建Stuff对象,则其中包含birth,其中包含year。这些不需要手动分配,这是您尝试使用new short[sizeof(birth_year)]进行的操作。相反,您应该只为其分配一个值:

actual->person->birth.year = 1990;

错误的原因是new ...表达式返回指向它们分配的对象的指针。这意味着它会为您提供short*,然后您尝试将其存储在short中 - 这不会起作用。

您遇到的另一个问题是new不像malloc那样有效。你只需传递你想要多少个对象,而不是多少字节。如果您想要一个short,则只需执行new short。如果你想要一个比较两个short的数组,你可以new short[2]。请记住,动态分配的对象需要delete d - 在动态分配的数组的情况下,您需要使用delete[]来销毁它。