我正在使用 C++ 编写一个学校项目,并且正在使用我们学校的 unix 服务器按照教授的指示编写它。我正在使用 vim 和 g++ 进行编译。
这个项目是建立在另一个项目 Lab0 的基础上,在 TA 的帮助下我没有遇到任何问题,但不得不做一些奇怪的事情来构建它(#include LinkedSortedList.cpp 文件位于 LinkedSortedList.h 的底部)。班上的每个人都用#include .cpp 文件做了这些奇怪的事情。
首先,这里是编译好的 Lab0 文件和#includes:
(这篇文章没有在我的 makefile 中显示我的标签,但它们就在那里!)
生成文件:
main: *.cpp *.h
g++ -o LSL main.cpp
clean:
rm -f *.o LSL*
Lab0(构建的那个)是这样的:
文件:
main.cpp(未模板化):
#include "LinkedSortedList.h"
#include <iostream>
using namespace std;
SortedList.h(模板):没有
LinkedNode.h(模板):
#include <iostream>
using namespace std;
LinkedSortedList.h(模板):
#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(模板):没有
构建和运行这个项目没有问题。
这是我的问题:
下面是lab1,我遇到问题的那个Lab1 使用了Lab0 中的所有文件,只是添加了Employee.h 和Employee.cpp。
Lab1(不会构建的)是这样的:
文件:
实验室1.cpp:
#include <iomanip>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdexcept>
#include "Employee.h"
#include "LinkedSortedList.h"
SortedList.h(模板):没有
LinkedNode.h(模板):
#include <iostream>
using namespace std;
LinkedSortedList.h(模板):
#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(模板):没有
Employee.h(未模板化):
#include <iostream>
#include <sstream>
using namespace std;
Employee.cpp(未模板化):
#include <stdio.h>
#include <string.h>
(这篇文章没有在我的 makefile 中显示我的标签,但它们就在那里!)
makefile:
main: *.cpp *.h
g++ -o LSL lab1.cpp
clean:
rm -f *.o LSL*
我得到的错误:
这是我遇到的错误。似乎没有看到 Employee.cpp/Employee.h 文件。有任何想法吗??
unixserver:Lab1> make
g++ -o LSL lab1.cpp
/tmp/ccamnaqx.o: In function
createRecord()':
lab1.cpp:(.text+0x3fb): undefined reference to
Employee::Employee()'
lab1.cpp:(.text+0x477): undefined reference to Employee::setLastName(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
lab1.cpp:(.text+0x4f2): undefined reference to
Employee::setFirstName(std::basic_string, std::allocator >)'
lab1.cpp:(.text+0x589): undefined reference to Employee::setId(int)'
lab1.cpp:(.text+0x5ce): undefined reference to
Employee::setSalary(int)'
lab1.cpp:(.text+0x60e): undefined reference to Employee::setDepartment(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
lab1.cpp:(.text+0x67c): undefined reference to
Employee::setPhoneNumber(std::basic_string, std::allocator >)'
lab1.cpp:(.text+0x6ea): undefined reference to Employee::setAddress(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
lab1.cpp:(.text+0x758): undefined reference to
Employee::setHireDate(std::basic_string, std::allocator >)'
lab1.cpp:(.text+0x7c6): undefined reference to `Employee::setEmailAddress(std::basic_string, std::allocator >)'
collect2: ld returned 1 exit status
make: * [main] Error 1
任何帮助将不胜感激!