זקוק לעזרה בc++

muehmueh

New member
זקוק לעזרה בc++

שלום לכולם, אני כרגע לומד threads בשפה c++ , ונתקלתי בבעיה, כתבתי אובייקט שבאחת השיטות שלו הוא מייצר thread באמצעות הפקודה CreateThread, והקומפיילר רושם לי שגיאת קומפילציה, שאני לא כל כך מבין מה היא אומרת, בנוגע לTreadProc . השגיאה: error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)' העניין הוא שהשגיאה מופיעה רק כשחילקתי את התוכנית שלי לקובץ header וקובץ cpp, לפני זה התוכנית הייתה כתובה בקובץ cpp אחד, פונקציית main ופונקציית ThreadProc והכל עבד. מישהו יודע איך אני יבול לתקן את השגיאה? ועוד דבר האם את הThreadProc שכתבתי אני צריך לכתוב כשיטה של האובייקט, או להכריז עליה כפונקציה סטטית ( אם זה משנה בכלל)? תודה לכל העוזרים והתומכים...
 

vinney

Well-known member
זה משנה

זו צריכה להיות פונקציה סטטית. אני חושב שזאת הבעיה שלך כרגע.
 

muehmueh

New member
זה עבד...

תודה רבה זה תיקן לי את השגיאה, אבל עכשיו זה נותן לי שגיאה בlinking שאני לא יודע מה היא אומרת. השגיאה : error LNK2001: unresolved external symbol "public: static unsigned long __stdcall CServer::ThreadProc(void *)" (?ThreadProc@CServer@@SGKPAX@Z) מישהו יודע איך מתקנים את השגיאה?
 

vinney

Well-known member
תבדוק שיש הצהרות מתאימות

תוודא שהprototype מתאים לCPP
 

muehmueh

New member
כנראה יש משהו שאני לא מבין

הצלחתי לתקן את השגיאה על ידי כך שכתבתי את גוף הפונקציה ThreadProc בתוך הheader ולא בתוך הcpp כמו שהיה מקודם. אתה יודע למה זה עבד? האם תמיד שאני כותב פונקציות סטטיות באובייקט אני צריך לכתוב אותם בheader ולא בcpp?
 

vinney

Well-known member
אין משמעות לסיומת הקובץ

כנראה יש לך יותר מCPP אחד, וכשאתה מלנקג', אתה לא מלנקג' את כולם ביחד.
 
למעלה