I am working on a school project in C++ and am using our schools unix server to write it as instructed by the professor. I am using vim and g++ to compile.
This project is built off another project, Lab0 which I had no trouble getting to build after some help from the TA, but had to do some weird stuff to get it to build (#include LinkedSortedList.cpp file at the bottom of LinkedSortedList.h). Everyone in the class did this weird stuff with #include .cpp file.
First, here are the files and what #includes they have for Lab0 which is compiling fine:
(The post is not showing my tabs in my makefile but they’re there!)
makefile:
main: *.cpp *.h
g++ -o LSL main.cpp
clean:
rm -f *.o LSL*
Lab0 (The one that builds), is like this:
Files:
main.cpp (NOT Templated):
#include "LinkedSortedList.h"
#include <iostream>
using namespace std;
SortedList.h (Templated):
Nothing
LinkedNode.h (Templated):
#include <iostream>
using namespace std;
LinkedSortedList.h (Templated):
#include "SortedList.h"
#include "LinkedNode.h"
#include <iostream>
using namespace std;
#include "LinkedSortedList.cpp" // At the bottom fo this file above the #endif to get the program to compile from what the TA told me to do for lab0 due to the templated class.
LinkedSortedList.cpp (Templated):
Nothing
No problems building and running this project.
Here is my issue:
Below is lab1, the one I am having trouble with and Lab1 uses all the files from Lab0 just adds Employee.h and Employee.cpp.
Lab1 (The one that won’t build) is like this:
Files:
lab1.cpp:
#include <iomanip>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdexcept>
#include "Employee.h"
#include "LinkedSortedList.h"
SortedList.h (Templated):
Nothing
LinkedNode.h (Templated):
#include <iostream>
using namespace std;
LinkedSortedList.h (Templated):
#include "SortedList.h"
#include "LinkedNode.h"
#include "Employee.h"
#include <iostream>
using namespace std;
#include "LinkedSortedList.cpp" // At the bottom fo this file above the #endif to get the program to compile from what the TA told me to do for lab0 due to the templated class.
LinkedSortedList.cpp (Templated):
Nothing
Employee.h (NOT templated):
#include <iostream>
#include <sstream>
using namespace std;
Employee.cpp (NOT templated):
#include <stdio.h>
#include <string.h>
(The post is not showing my tabs in my makefile but they’re there!)
makefile:
main: *.cpp *.h
g++ -o LSL lab1.cpp
clean:
rm -f *.o LSL*
Errors I get:
Here are the errors I am getting. It seems like the Employee.cpp/Employee.h files are not being seen. Any ideas??
unixserver:Lab1> make
g++ -o LSL lab1.cpp
/tmp/ccamnaqx.o: In function createRecord()':Employee::Employee()’
lab1.cpp:(.text+0x3fb): undefined reference to
lab1.cpp:(.text+0x477): undefined reference to Employee::setLastName(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'Employee::setFirstName(std::basic_string, std::allocator >)’
lab1.cpp:(.text+0x4f2): undefined reference to
lab1.cpp:(.text+0x589): undefined reference to Employee::setId(int)'Employee::setSalary(int)’
lab1.cpp:(.text+0x5ce): undefined reference to
lab1.cpp:(.text+0x60e): undefined reference to Employee::setDepartment(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'Employee::setPhoneNumber(std::basic_string, std::allocator >)’
lab1.cpp:(.text+0x67c): undefined reference to
lab1.cpp:(.text+0x6ea): undefined reference to Employee::setAddress(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'Employee::setHireDate(std::basic_string, std::allocator >)’
lab1.cpp:(.text+0x758): undefined reference to
lab1.cpp:(.text+0x7c6): undefined reference to `Employee::setEmailAddress(std::basic_string, std::allocator >)’
collect2: ld returned 1 exit status
make: * [main] Error 1
Any help would be greatly appreciated!
You have to compile
Employee.cppand link it into the executable:It could be that the same goes for
LinkedSortedList.cpp(its purpose is not entirely clear to me).