我正在用C ++开展一个学校项目,正在使用我们的学校unix服务器按照教授的指示编写它。我正在使用vim和g ++进行编译。
这个项目是基于另一个项目Lab0构建的,在TA的一些帮助下我没有遇到任何麻烦,但是不得不做一些奇怪的事情来构建它(#include LinkedSortedList.cpp文件位于底部LinkedSortedList.h)。班上的每个人都用#include .cpp文件做了这个奇怪的事情。
首先,这里是文件以及他们为Lab0编写的#include正常的#include:
(帖子没有在我的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(不会构建的那个)是这样的:
文件:
lab1.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
非常感谢任何帮助!
答案 0 :(得分:3)
您必须编译Employee.cpp
并将其链接到可执行文件:
g++ -o LSL lab1.cpp Employee.cpp
LinkedSortedList.cpp
可能也是如此(我的目的并不完全清楚)。
答案 1 :(得分:3)
您的第二个项目的makefile只编译lab1.cpp而不是其他cpp文件。您还需要考虑其他两个(Employee.cpp和LinkSortedList.cpp)。
此外,请在此网站上了解如何正确格式化代码。 https://stackoverflow.com/editing-help