我遇到转换错误,实际上不知道如何修复它。
我必须使用这些结构,并且不知道如何访问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
答案 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)
year
是short
,是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[]
来销毁它。