עבור לתוכן

בעיית קומפילציה ב- C שגיאה: ERROR C2071

Featured Replies

פורסם

שלום!

אני לא מצליח להעביר קומפילציה את הקטע קוד הבא:

typedef struct
{
Type vehicle;
static int size;
unsigned int taken:1;
int type;
}Carlot;

השגיאה בקומפילציה נגרמת בגלל המשתנה הסטטי SIZE.

אם אני מגדיר אותו כמשתנה רגיל (לוקאלי) אז הקומפילציה עוברת חלק.

למה???

תודה.

שלומי.

פורסם

אני לא חושב שאפשר להגדיר ב-C משתנה סטטי בתוך struct (אין לזה משמעות).

פורסם

ואו. לא, ממש לא.

פורסם
  • מחבר

וואי, ככה הבנתי לפי חיפושים בפורומים.

קצת מצחיק שהמרצה מלמד אותנו את זה, ועוד נותן מטלה ומדגיש להשתמש במשתנה סטטי שם :)

תודה!

פורסם

ב-C++ זה אפשרי.

פורסם
  • מחבר

אוקיי ניסיתי לקמפל את זה בפרוייקט חדש עם הסיומת CPP (כ C++) ואני מקבל שגיאה:

Error 1 error LNK2001: unresolved external symbol "public: static int <unnamed-tag>::size" ....

אגב אני משתמש ב VS2005

אולי אני צריך גרסא חדשה יותר?

פורסם

כשמצהירים על static אז חייבים גם ליצור אותו איפשהו.

כלומר בקובץ h אתה שם את ההצהרה:

typedef struct
{
Type vehicle;
static int size;
unsigned int taken:1;
int type;
}Carlot;

ובקובץ cpp כלשהו אתה שם את ההגדרה:

static int Carlot::size;

פורסם
  • מחבר

כשמצהירים על static אז חייבים גם ליצור אותו איפשהו.

כלומר בקובץ h אתה שם את ההצהרה:

typedef struct
{
Type vehicle;
static int size;
unsigned int taken:1;
int type;
}Carlot;

ובקובץ cpp כלשהו אתה שם את ההגדרה:

static int Carlot::size;

אוקיי, ניסיתי את זה, ועכשיו אני מקבל שגיאה:

Error	1	error C2720: 'Carlot::size' : 'static ' storage-class specifier illegal on members

ניסיתי להגדיר static int Carlot::size; גם בתוך ה MAIN וגם גלובאלי.

וודאי שזה נתמך בVS 2005?

פורסם
  • מחבר

וואללה גם לא עובר

פורסם
  • מחבר

אין לי מושג כבר.

אני אודה לך אם יש לך אפשרות להעלות לי לכאן קטע קוד קצר עם משתנה סטטי בתוך מבנה שעובר אצלך רומפילציה, אצלי זה פשוט נותן שגיאות.

פורסם

הייתי עושה את זה, אבל לא מותקן לי על המחשב הזה שום קומפיילר C או ++C (המחשב שלי לצערי כרגע מושבת).

מה הקוד שאתה מנסה לקמפל, ומה השגיאות שאתה מקבל?

פורסם
  • מחבר

אוקיי, אני אפרט.

הנה הקובץ שאני עושה לו INCLUDE ב MAIN:


//structs.h
typedef struct
{
Type vehicle;
static int size; //static isn't working
unsigned int taken:1;
int type;
}Carlot;

ה MAIN():


#include "structs.h

void main()
{
Carlot a;
}

השגיאה שאני מקבל בנסיון לקמפל:


error LNK2001: unresolved external symbol "public: static int <unnamed-tag>::size" (?size@<unnamed-tag>@@2HA)

אם אני מוסיף את ההגדרה כמו שאמרת:

static int Carlot::size;

אני מקבל 2 שגיאות:


Error 1 error C2655: 'Carlot::size' : definition or redeclaration illegal in current scope
Error 2 error C2720: 'Carlot::size' : 'static ' storage-class specifier illegal on members

אם אני מנסה בלי ה STATIC כמו שאמרת:

int Carlot::size;

אז אני מקבל את אותה שגיאה כמו השגיאה הראשונה 2655, והשגיאה השנייה היא:

Error 2	error C2086: 'int <unnamed-tag>::size' : redefinition

פורסם

למה אתה משתמש ב- typedef?

מה הסיומת של הקובץ שלך? אתה מנסה לקמפל את זה לC או CPP?

מה זה :1?

וחסר לך " בשורה הראשונה של הקובץ של הMAIN.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים