elis88 Δημοσ. 1 Νοεμβρίου 2008 Δημοσ. 1 Νοεμβρίου 2008 Gia kapoio logo molis kanw login ta vlepw ola kinezika kai den mporw na garfw ellinika, giafto parakalw min diagrapsete to post. Loipon antimetopizw to eksi provlima, exw dyo takseism h mia apotelei tin main kai i alli to Employee to opoio einai object sti main. Enw kanei compile kanonika sto build m vgazei to eksis: > >------ Build started: Project: Bank Accounts, Configuration: Debug Win32 ------ 1>Linking... 1>Main.obj : error LNK2005: "public: __thiscall Employee::Employee(void)" (??0Employee@@QAE@XZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: void __thiscall Employee::setName(void)" (?setName@Employee@@QAEXXZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: void __thiscall Employee::setSurname(void)" (?setSurname@Employee@@QAEXXZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: void __thiscall Employee::setAge(void)" (?setAge@Employee@@QAEXXZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: void __thiscall Employee::setAfm(void)" (?setAfm@Employee@@QAEXXZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: void __thiscall Employee::setWage(void)" (?setWage@Employee@@QAEXXZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Employee::getAfm(void)const " (?getAfm@Employee@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Employee::getName(void)const " (?getName@Employee@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Employee::getSurname(void)const " (?getSurname@Employee@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: int __thiscall Employee::getAge(void)const " (?getAge@Employee@@QBEHXZ) already defined in Employee.obj 1>Main.obj : error LNK2005: "public: double __thiscall Employee::getWage(void)const " (?getWage@Employee@@QBENXZ) already defined in Employee.obj 1>C:\Documents and Settings\elis\My Documents\Visual Studio 2008\Projects\Bank Accounts\Debug\Bank Accounts.exe : fatal error LNK1169: one or more multiply defined symbols found 1>Build log was saved at "file://c:\Documents and Settings\elis\My Documents\Visual Studio 2008\Projects\Bank Accounts\Bank Accounts\Debug\BuildLog.htm" 1>Bank Accounts - 12 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== O kwdikas m einai o eksis: Employee: > #include <iostream> #include <string> using namespace std; class Employee { private: string name; string surname; int age; string afm; double wage; public: Employee(); void setName(); void setSurname(); void setAge(); void setAfm(); void setWage(); string getName() const; string getSurname() const; int getAge() const; string getAfm() const; double getWage() const; }; Employee::Employee() { setName(); setSurname(); setAge(); setAfm(); setWage(); } void Employee::setName() { cout<<"Name: "; cin>>this->name; cout<"\n"; } void Employee::setSurname() { cout<<"Surname: "; cin>>this->surname; cout<<"\n"; } void Employee::setAge() { cout<<"Age: "; cin>>this->age; cout<<"\n"; } void Employee::setAfm() { cout<<"Afm: "; cin>>this->afm; cout<<"\n"; } void Employee::setWage() { cout<<"Wage: "; cin>>this->wage; cout<<"\n"; } string Employee::getAfm() const { return afm; } string Employee::getName() const { return name; } string Employee::getSurname() const { return surname; } int Employee::getAge() const { return age; } double Employee::getWage() const { return wage; } Main: > #include <iostream> #include <string> #include <vector> #include "Employee.cpp" using namespace std; void addPerson(vector<Employee> v); int main() { vector<Employee> list; addPerson(list); return 0; } void addPerson(vector<Employee> v) { Employee p; v.push_back(p); } Efxaristw poly
kickeras Δημοσ. 1 Νοεμβρίου 2008 Δημοσ. 1 Νοεμβρίου 2008 Έχεις δηλώσει τα functions δύο φορές στο ίδιο αρχείο. Βάλε το class σε ένα Employee.h, τα function definitions στο cpp και στη main κάνε include το .h.
fromaz Δημοσ. 1 Νοεμβρίου 2008 Δημοσ. 1 Νοεμβρίου 2008 Να βάλεις το declaration του Employee στο Employee.h και το definition στο Employee.cpp. Στο main, να κάνεις include το Employee.h. Όπως το έχεις, ο linker διαμαρτύρεται γιατί συναντά δυο φορές το definition των μεθόδων του Employee, και αυτό αντίκειται στον κανόνα που είναι γνωστός ως ODR. Edit: Sorry kickeras, δεν μου έδειξε την απάντησή σου στο preview (?)
elis88 Δημοσ. 2 Νοεμβρίου 2008 Μέλος Δημοσ. 2 Νοεμβρίου 2008 Efxaristw polu paidia kai signomi kai pali gia ta greeklish... alla den ginetai allios...
Aesmade Δημοσ. 2 Νοεμβρίου 2008 Δημοσ. 2 Νοεμβρίου 2008 Gia na dior8wseis to encoding svise to cache kai ta cookies tou insomnia, 3anakane login kai katw aristera sto dropdown menu me tis glwsses diale3e tin teleytaia. Eixa to idio provlima kai eftia3e etsi.
evabb Δημοσ. 2 Νοεμβρίου 2008 Δημοσ. 2 Νοεμβρίου 2008 επισης μην ξεχασεις στο αρχειο .h την εντολη #ifndef-EMPLOYEE-H #define-EMPLOYEE-H στην αρχη του αρχειου
elis88 Δημοσ. 2 Νοεμβρίου 2008 Μέλος Δημοσ. 2 Νοεμβρίου 2008 επισης μην ξεχασεις στο αρχειο .h την εντολη #ifndef-EMPLOYEE-H #define-EMPLOYEE-H στην αρχη του αρχειου Τι κάνει αυτό;
fromaz Δημοσ. 3 Νοεμβρίου 2008 Δημοσ. 3 Νοεμβρίου 2008 Λέγεται inclusion guard. Αν σε ενδιαφέρει η C++, σου προτείνω μία από τις καλύτερες πηγές γνώσης και πρακτικής, ever, το C++ FAQ. Υπάρχει και σε βιβλίο, και είναι must.
evabb Δημοσ. 3 Νοεμβρίου 2008 Δημοσ. 3 Νοεμβρίου 2008 Τι κάνει αυτό; οταν κανει το compile των αρχειων ειναι για να μην σου λεει οτι δεν βρισκει το definition των function και μπλοκαρει και κανει κυκλους. τελειως χοντρικη εξηγηση το ξεκαθαριζω
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.