0

我正在使用 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 toEmployee::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 toEmployee::setFirstName(std::basic_string, std::allocator >)' lab1.cpp:(.text+0x589): undefined reference to Employee::setId(int)' lab1.cpp:(.text+0x5ce): undefined reference toEmployee::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 toEmployee::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 toEmployee::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

任何帮助将不胜感激!

4

2 回答 2

3

您必须编译Employee.cpp并将其链接到可执行文件中:

g++ -o LSL lab1.cpp Employee.cpp

可能也是如此LinkedSortedList.cpp(它的目的对我来说并不完全清楚)。

于 2012-04-28T20:47:04.120 回答
3

您的第二个项目的 makefile 仅编译 lab1.cpp 而不是您的其他 cpp 文件。您还需要考虑另外两个(Employee.cpp 和 LinkSortedList.cpp)。

另外,请在此站点上了解如何正确格式化代码。 https://stackoverflow.com/editing-help

于 2012-04-28T20:47:13.063 回答