收到此错误:
1>c:\users\b1021568\documents\visual
studio 2010 \ projects \ tarefa42 \ tarefa
42 \ main.cpp(112):错误C2664: 'cria_aluno':无法转换 参数2从'const char [7]'到 “字符” 1 GT;没有可以进行此转换的上下文
尝试编译时:
int main(void)
{
Aluno *a[5];
a[0] = cria_aluno(1, "turma1", "Joao", 7.0, 8.4, 4.3);
a[1] = cria_aluno(2, "turma2", "Maria", 3.2, 5.1, 10.0);
a[2] = cria_aluno(3, "turma3", "Rafael", 8.1, 3.2, 4.5);
a[3] = cria_aluno(4, "turma4", "Jose", 1.3, 7.7, 9.3);
a[4] = cria_aluno(5, "turma5", "Lais", 4.5, 1.3, 9.9);
ordena(5, a);
return 0;
}
那是我的cria_aluno函数:
Aluno *cria_aluno(int mat, char turma, char nome, float p1, float p2, float p3)
{
Aluno *a;
a = (Aluno*) malloc(sizeof(Aluno));
if(a == NULL)
{
printf("Memoria insuficiente");
return NULL;
}
a->mat = mat;
a->turma = turma;
strcpy(a->nome, nome);
a->p1 = p1;
a->p2 = p2;
a->p3 = p3;
return a;
}
答案 0 :(得分:3)
将其更改为
Aluno *cria_aluno(int mat, const char* turma, const char* nome, float p1, float p2, float p3)
“turma1”等属于const char*
类型,而不是char
答案 1 :(得分:1)
更改
Aluno *cria_aluno(int mat, char turma, char nome, float p1, float p2, float p3)
到
Aluno *cria_aluno(int mat, const char* turma, const char* nome, float p1,
float p2, float p3)
{
Aluno *a = (Aluno*) malloc(sizeof(Aluno));
if(a == NULL)
{
printf("Memoria insuficiente");
return NULL;
}
a->mat = mat;
a->turma = malloc(strlen(turma)+1);
strcpy(a->turma, turma);
a->nome = malloc(strlen(nome)+1);
strcpy(a->nome, nome);
a->p1 = p1;
a->p2 = p2;
a->p3 = p3;
return a;
}
答案 2 :(得分:1)
你的函数期望参数2和3 char类型而不是char指针(char *,通常用作“string”)。
在你的main函数中,你使用char * type(string)作为参数2和3调用cria_aluno,这是导致错误的原因。
首先,您需要确定您希望在Aluno结构中存储的内容。让我们以turma为例:
如果您希望存储单个字符,则应使用char作为结构和函数中的turma类型。此外,在函数调用中,您应该使用单个字符作为参数2,例如:'a'。要复制此角色,您应该使用简单的副本:a-> turma = turma;
如果您希望存储字符串,则应使用char [x](其中x是最大字符串长度+末尾的\ 0)作为结构中的turma类型。在函数中,你应该使用char *(const char *会更好)。在函数调用中,您可以使用字符串(例如:“example”)。要复制此属性,您应该使用strcpy。
将结构中的turma存储为字符串模式的另一种方法是将结构中的类型更改为char *。然后,在需要时,分配内存。
祝你好运阿米尔
答案 3 :(得分:0)
在函数调用中
a[0] = cria_aluno(1, "turma1", "Joao", 7.0, 8.4, 4.3);
"turma1"
和"Joao"
是字符串文字,它们是char
(C ++中的const char
)的数组。这两个表达式的类型分别为char [7]
和char [5]
。这些类型与char
不兼容,turma
是nome
和cria_aluno
的{{1}},因此错误。
在大多数情况下,数组表达式的类型会隐式地从“{-1}}的N元素数组”转换为“指向T
的指针”。那么实际传递给T
的是两个cria_aluno
类型的表达式,而不是char *
。因此,您需要将char
的声明更改为
cria_aluno
为什么Aluno *cria_aluno(int mat, const char *turma, const char *nome, float p1, float p2, float p3)
代替const char *
?这有助于防止您意外修改指针指向的内容;尝试修改字符串文字的内容会导致未定义的行为。