Προς το περιεχόμενο

C++ problem


elis88

Προτεινόμενες αναρτήσεις

Δημοσ.

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 :)

Δημοσ.

Έχεις δηλώσει τα functions δύο φορές στο ίδιο αρχείο. Βάλε το class σε ένα Employee.h, τα function definitions στο cpp και στη main κάνε include το .h.

Δημοσ.

Να βάλεις το declaration του Employee στο Employee.h και το definition στο Employee.cpp.

 

Στο main, να κάνεις include το Employee.h.

 

Όπως το έχεις, ο linker διαμαρτύρεται γιατί συναντά δυο φορές το definition των μεθόδων του Employee, και αυτό αντίκειται στον κανόνα που είναι γνωστός ως ODR.

 

Edit: Sorry kickeras, δεν μου έδειξε την απάντησή σου στο preview (?)

Δημοσ.

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.

Δημοσ.
επισης μην ξεχασεις στο αρχειο .h την εντολη

 

#ifndef-EMPLOYEE-H

#define-EMPLOYEE-H

 

στην αρχη του αρχειου

 

Τι κάνει αυτό;

Δημοσ.
Τι κάνει αυτό;

 

οταν κανει το compile των αρχειων ειναι για να μην σου λεει οτι δεν βρισκει το definition των function και μπλοκαρει και κανει κυκλους. τελειως χοντρικη εξηγηση το ξεκαθαριζω:X

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...