6

これが非常に基本的な問題であることはわかっていますが、それなしでは先に進むことができず、他の場所で明確に説明されていません。

このプログラミングで、宣言されていない識別子のエラーが非常に多いのはなぜですか? 宣言したけど。

これらは私が得ているエラーです。

Error   2   error C2143: syntax error : missing ';' before 'type'
Error   3   error C2065: 'ptr' : undeclared identifier
Error   4   error C2065: 'contactInfo' : undeclared identifier
Error   5   error C2059: syntax error : ')'
Error   15  error C2223: left of '->number' must point to struct/union

もっと...

#include<stdio.h>
#include<stdlib.h>

typedef struct contactInfo
{
    int number;
    char id;
}ContactInfo;


void main()
{

    char ch;
    printf("Do you want to dynamically etc");
    scanf("%c",&ch);
    fflush(stdin);


        struct contactInfo nom,*ptr;
        ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

    nom.id='c';
    nom.number=12;
    ptr->id=nom.id;
    ptr->number=nom.number;
    printf("Number -> %d\n ID -> %c\n",ptr->number,ptr->id);

}
4

5 に答える 5

5
typedef struct contactInfo
{
    int number;
    char id;
}ContactInfo;

このコードは、次の 2 つのことを定義します。

  1. という名前のタイプContactInfo
  2. struct名前付きcontactInfo

cとの違いに注意してくださいC

あなたのコードでは、許可されている両方の混合の組み合わせを使用しています(IMHOを混乱させますが)。

structバリアントを使用する場合は、明示的に使用する必要がありますstruct contactInfo。他のバリアント ( ContactInfo)については、すでに型定義の一部であるため、その部分を省略する必要があります。struct

したがって、構造の異なる定義の両方に注意してください。どちらか一方のみを使用することをお勧めします。


私は手元に Visual Studio を持っていませんが、次の (修正された) コードは、警告なしで gcc で適切にコンパイルされます。

#include<stdlib.h>

typedef struct contactInfo
{
    int number;
    char id;
}ContactInfo;


void main()
{
    ContactInfo nom,*ptr;
    ptr=malloc(2*sizeof(ContactInfo));    
}

(コードのあまり面白くない/変更されていない部分は省略しました)

于 2013-01-23T09:12:30.863 に答える
3

これ:

ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

は間違っています。 という型はありませんcontactInfo

がありstruct contactInfo、これはtypedef:d asContactInfoです。C では大文字と小文字が区別されます ( structC++ での動作とは異なり、 を含める必要があります)。

また、引用された行は次のように記述したほうがよいことに注意してください。

ptr = malloc(2 * sizeof *ptr);

の戻り値をキャストするのmalloc()は C では悪い考えなので、キャストを削除しました。また、型を繰り返すのはエラーのリスクが大きくなるので良くないので、それも削除しました。

Note とsizeof *ptrは「指さす型の大きさ」という意味ptrで、とても便利なものです。

于 2013-01-23T09:04:20.930 に答える
0

交換

ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

ptr=malloc(2*sizeof(struct contactInfo));
于 2013-01-23T09:06:07.710 に答える
0

C は大文字と小文字を区別する言語です。

ptr=(contactInfo)malloc(2*sizeof(contactInfo));

次のようになります。

ptr=malloc(2*sizeof(ContactInfo));

于 2013-01-23T09:06:43.803 に答える
-1
struct contactInfo nom,*ptr;
ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

ここでは、contactInfo を typcast に使用していますが、これは struct contactInfo である必要があります。また、それを ContactInfo に typedef しているので、それも使用できます。

    struct contactInfo nom,*ptr;
    ptr=(ContactInfo*)malloc(2*sizeof(ContactInfo));
于 2013-01-23T09:08:20.963 に答える