בעיית קומפילציה ב- C שגיאה: ERROR C2071 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


Shlompy

Recommended Posts

שלום!

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

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

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

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

למה???

תודה.

שלומי.

קישור לתוכן
שתף באתרים אחרים

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

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

תודה!

קישור לתוכן
שתף באתרים אחרים

אוקיי ניסיתי לקמפל את זה בפרוייקט חדש עם הסיומת 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?

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

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

הנה הקובץ שאני עושה לו 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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...