פורסם 2009 במאי 816 שנים שגיאה לדוגמה 1>Parser.obj : error LNK2005: "void __cdecl addEntry(class MyString,int)" (?addEntry@@YAXVMyString@@H@Z) already defined in main.obj הקוד: #ifndef SymbolTable#define SymbolTable#include <string.h>#include <iostream>#include "MyString.h"using namespace std;MyString* Mysymbol;int* value;int symbolsNum=0;void addEntry(MyString symbl, int address){if (symbolsNum==0){ Mysymbol=new(nothrow) MyString[1]; Mysymbol[0]=symbl; value=new(nothrow) int[1]; value[0]=address; symbolsNum++;}else{ MyString* tmpsymbol; tmpsymbol = new(nothrow) MyString[symbolsNum]; int* tmpvalue; tmpvalue = new(nothrow) int[symbolsNum]; for(int i=0; i<symbolsNum; i++) { tmpsymbol[i]=Mysymbol[i]; tmpvalue[i]=value[i]; } delete [] Mysymbol; delete [] value; symbolsNum++; Mysymbol=new(nothrow) MyString[symbolsNum]; value=new(nothrow) int[symbolsNum]; for(int i=0; i<symbolsNum-1; i++) { Mysymbol[i]=tmpsymbol[i]; value[i]=tmpvalue[i]; } delete [] tmpsymbol; delete [] tmpvalue; Mysymbol[symbolsNum-1]=symbl; value[symbolsNum-1]=address;}}int FindPlace(MyString Str){ bool Ans = false; int i=0; while (Ans==false && i<symbolsNum) { if (strcmp(Mysymbol[i].get_string(), Str.get_string())==0) Ans=true; i++; } if (Ans) return i-1; else return -1;}bool Contains(MyString Str){ if (FindPlace(Str)>=0) return true; else return false;}int GetAddress(MyString Str){ int add = FindPlace(Str); if (add>=0) return value[add]; else return -1;}void Test(){ for (int i=0; i<symbolsNum; i++) cout<<"Symbol: "<<Mysymbol[i]<<" Address: "<<value[i]<<endl;}#endif אם יש צורך בקוד של הmain אני אוסיף אותו כפי שאפשר לראות, כל הפונקציות הם מאותו קובץ, הפכתי את ה#include "SymbolTable.h" בmain להערה, וכך גם עשיתי לכל הפונקציות ששייכות לSymbolTable בmain, עדיין אותן שגיאות (9 שגיאות, אחת לכל משתנה גלובלי ואחת לכל פונקציה) הצילו! זה דיי דחוף לי תודה מראש איל עריכה: אני מניח שזה לא משנה, אבל כל הקוד נמצא בקובץ HEADER אחד ואין קובץ CPP מתאים
פורסם 2009 במאי 816 שנים בטח שזה משנה. כל קובץ שעושה אינקלוד לקובץ הזה בעצם מגדיר מחדש את הפונקציות האלה, וזה מה שגורם לבעיה.לא ממשמשים פונקציות בקובץ h אלא אם הן פונקציות inline.
פורסם 2009 במאי 916 שנים לא ממשמשים פונקציות בקובץ h אלא אם הן פונקציות inline.(או אם הן template ואין ברירה, ואז צריך להזהר.)אם זה עדיין לא ברור: #include זה הוראה ל-preprocessor שגורמת לו לקחת את תוכן הקובץ הכלול ולשפוך את כל התוכן לתוך הקובץ הכולל.
פורסם 2009 במאי 916 שנים מחבר אהא... טוב... זה מסביר, תודה(תיקנתי ואין אף שגיאה... פשוט הנחתי שבגלל שאפשר לממש חלק מהפונקציות בקובץ H אז אפשר לממש גם את כולן בלי קובץ CPP... וכל מה שאני יודע על התהליך שלפני הקומפילציה זה שזה עושה לינק בין הקבצים)
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.