1

收到此错误:

1>c:\users\b1021568\documents\visual

studio 2010\projects\tarefa42\tarefa
42\main.cpp(112): error C2664: 'cria_aluno' : 无法将参数 2 从 'const char [7]' 转换为 'char' 1> 没有进行此转换的上下文是可能的

尝试编译时:

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;
}
4

4 回答 4

3

将其更改为

Aluno *cria_aluno(int mat, const char* turma, const char* nome, float p1, float p2, float p3)

“turma1”等是类型const char*,不是char

于 2011-05-09T11:51:13.197 回答
1

您的函数期望作为参数 2 和 3 char 类型,而不是 char 指针(char*,通常用作“字符串”)。

在您的主函数中,您使用 char* 类型(字符串)作为参数 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*。然后,在需要时分配内存。

祝你好运

阿米尔

于 2011-05-09T12:23:58.230 回答
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;
}
于 2011-05-09T11:49:33.333 回答
0

在函数调用中

a[0] = cria_aluno(1, "turma1", "Joao", 7.0, 8.4, 4.3); 

"turma1"并且"Joao"字符串文字,它们是charconst char在 C++ 中)的数组。这两个表达式的类型分别是char [7]char [5]。这些类型与 不兼容char,这是您声明的内容turma,并且nome是 in cria_aluno,因此出现错误。

在大多数情况下,数组表达式的类型从“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 *而不是char *?这有助于防止您意外修改指针指向的内容;尝试修改字符串文字的内容会导致未定义的行为。

于 2011-05-09T14:35:15.973 回答