我正在尝试使用名为BankAccount
的结构,它采用名称为50个字母的char数组,int ID
和double balance
。我试图用malloc()
把它放到指针但是我明白了
error : void can not be assigned to an entity of type BankAccount.
typedef struct
{
char name[50];
int ID;
double balance;
} BankAccount;
FILE *fp;
BankAccount *accounts = 0;
int accountSize = 0;
// I init like this in main function
accounts = malloc(accountSize * sizeof(*accounts));
void ReadAccountData(BankAccount *accounts, FILE *fp, int arraySize)
{
int i = 0;
while (!feof && i < arraySize) {
fread(&accounts, sizeof(accounts), i, fp);
i++;
}
}
答案 0 :(得分:1)
如果您使用的是C语言,则需要使用C编译器代码。您现在使用的编译器看起来像C ++编译器,它需要将void *
转换为目标类型。在C中你不应该这样做,正如@Olaf(Why you can't cast void *
in C)所指出的那样。
如何更改编译器?它取决于你正在使用的IDE和操作系统,这需要在我提供更多细节之前指定。
如果你想使用C ++,你几乎没有选择:
使用malloc
,但转换返回值:
accounts = static_cast<BankAccount *>(
malloc(accountSize * sizeof(BankAccount)));
使用专用于C++
的动态分配,并将BankAccount
视为C++
结构(您可以添加构造函数,析构函数,方法等):
accounts = new BankAccount[accountSize];
答案 1 :(得分:-2)
应该是这样的:
accounts = (BankAccount *)malloc(accountSize * sizeof(BankAccount));