2012-10-29 10 views
6

Dies ist der Code für mein Problem und ich bekomme 4 Fehler:Bereits in main.obj definiert

  1. student.obj: error LNK2005: "struct Node * admitedFirstNode" (admitedFirstNode @@ 3PAUNode @ @A) definiert sind bereits in main.obj
  2. student.obj: error LNK2005: "struct Node * allFirstNode" (allFirstNode @@ 3PAUNode @@ A) bereits in main.obj definiert
  3. student.obj: error LNK2005 : "struct Node * rejectedFirstNode" (? rejectedFirstNode @@ 3PAUNode @@ A) bereits in main.obj definiert
  4. pb4_OOP_lab1 \ Debug \ pb4_OOP_lab1.exe: schwerwiegender Fehler LNK1169: ein oder mehr multiplizieren definierte Symbole gefunden
#include "students.h"       //main 
int main()           
{ 
for(int i=0;i<NR_STUDENTS;i++) 
{ 
    Student *s1=new Student; 
    cout<<"Enter name: "; 
    getline(cin,s1->name); 
    cout<<"Enter garde: "; 
    cin>>s1->grade; 
    cin.ignore(); 
    addStudent(s1); 
    delete s1; 
} 

} 
#include "students.h"       //students.cpp 

void AddNodeToList(Node *firstNode, Student *studToAdd) 
{ 
Node *nodeToAdd=new Node; 
nodeToAdd->student=studToAdd; 
nodeToAdd->next=NULL; 

if(firstNode==NULL) 
{ 
    firstNode=nodeToAdd; 
} 
else 
{ 
    Node *temp; 
    temp=firstNode; 
    while(temp->next != NULL) 
    { 
     temp=temp->next; 
    } 
    temp->next=nodeToAdd; 
} 
} 
void addStudent(Student *studentToAdd) 
{ 
AddNodeToList(allFirstNode,studentToAdd); 
} 

void split() 
{ 
Node *temp=allFirstNode; 
while(temp->next != NULL) 
{ 
    Student *currentStud=temp->student; 
    if(currentStud->grade < GR) 
    { 
     AddNodeToList(rejectedFirstNode,currentStud); 
    } 
    else  
    { 
     AddNodeToList(admitedFirstNode,currentStud); 
    } 
} 
} 

void print(Node *firstNode) 
{ 

if(firstNode==NULL) 
{ 
    return; 
} 
else 
{ 
    Node *temp=firstNode; 
    Student *current=temp->student; 
    while(temp->next != NULL) 
    { 
     cout<<"----------------------------------------------"<<endl; 
     cout<<"Student name: "<<current->name<<endl; 
     cout<<"Student grade: "<<current->grade<<endl; 
    } 
} 
} 

#include <iostream>      //students.h 
#include <string> 

using namespace std; 

const int NR_STUDENTS=5; 
const double GR=5.0; 

struct Student 
{ 
string name; 
double grade; 
}; 

struct Node 
{ 
Student *student; 
Node *next; 
}; 

Node *allFirstNode; 
Node *admitedFirstNode; 
Node *rejectedFirstNode; 

void addStudent(Student *studentToAdd); 
void split(); 
void sort(); 
void print(); 
+0

Für die Nachwelt, wenn die anderen Vorschläge Ihr Problem nicht lösen, ich diesen Fehler vor bekommen haben, weil ich #include „meineDatei.cpp versehentlich tat "anstelle von #include" MyFile.h ". Das Ändern in .h löste mein Problem. Es lohnt sich, Ihre letzten Änderungen zu überprüfen, um zu sehen, ob Sie das zufällig getan haben. –

Antwort

12

Die Definition Node * rejectedFirstNode; in einer Header-Datei führt zu einem mehrfach definiert Symbol, weil alle Übersetzungseinheiten, die enthalten Dieser Header erzeugt ein Symbol dafür. Stattdessen wird in der Kopfzeile haben

//students.h 
extern Node * rejectedFirstNode; 

und die Definition in einer einzigen CPP-Datei bewegen:

//students.cpp 
Node * rejectedFirstNode; 

Es scheint auch, wie Sie C Code schreiben. Warum ist das mit C++ markiert? Wenn Sie nicht wissen, was C++ alles zu bieten hat, lesen Sie good introductory book.

1

Sie haben admitedFirstNode, allFirstNode und in der Header-Datei definiert. Dies definiert es in jeder cpp, die die Datei "students.h" enthält.

Teilen Sie die Deklaration und Definition auf. Erklären sie in "students.h":

extern Node *allFirstNode; 
extern Node *admitedFirstNode; 
extern Node *rejectedFirstNode; 

und in "students.cpp" die Variablen definieren:

Node *allFirstNode; 
Node *admitedFirstNode; 
Node *rejectedFirstNode; 
+0

Die externen Definitionen sind nicht erforderlich, da diese Variablen nur in students.cpp verwendet werden – gogoprog

3

Sie sind Variablen in students.h und students.h erklärt wird in beide inbegriffen main.cpp und student.cpp.

Sie sollten es vermeiden, Variablen in der Header-Datei zu deklarieren.

Versuchen folgenden Code in students.cpp zu setzen:

Node *allFirstNode; 
Node *admitedFirstNode; 
Node *rejectedFirstNode; 
Verwandte Themen