Already defined in main.obj

This is the code of my problem, and I get 4 errors:

  • student.obj: LNK2005 error: "struct Node * admitedFirstNode" (? admitedFirstNode @@ 3PAUNode @@ A) already defined in main.obj
  • student.obj: error LNK2005: "struct Node * allFirstNode" (? allFirstNode @@ 3PAUNode @@ A) already defined in main.obj
  • student.obj: LNK2005 error: "struct Node * rejectFirstNode" (? rejectFirstNode @@ 3PAUNode @@ A) already defined in main.obj
  • pb4_OOP_lab1 \ Debug \ pb4_OOP_lab1.exe: fatal error LNK1169: one or more characters were found with several values
#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(); 
+6
source share
3 answers

Definition Node * rejectedFirstNode; in the header file results in a repeatedly defined character, because all translation units that include this heading will generate a character for it. Instead in title

 //students.h extern Node * rejectedFirstNode; 

and move the definition in the file to one cpp :

 //students.cpp Node * rejectedFirstNode; 

It also seems like you are writing C code. Why is this tagged C ++? If you don't know what C ++ offers, read a good introductory book .

+12
source

You declare variables in students.h and students.h is included in both main.cpp and student.cpp.

You should avoid declaring variables in the header file.

Try entering the following code in students.cpp:

 Node *allFirstNode; Node *admitedFirstNode; Node *rejectedFirstNode; 
+3
source

You have admitedFirstNode , allFirstNode and rejectedFirstNode defined in the header file. This defines it in every cpp that includes the students.h file.

Separate declaration and definition. Declare them in "students.h":

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

and in "students.cpp" define the variables:

 Node *allFirstNode; Node *admitedFirstNode; Node *rejectedFirstNode; 
+1
source

All Articles