我首先向您展示我遇到的错误:
Henrys-MacBook-Pro-2:assignment1 HenryDashwood$ clang++ main.cpp
Undefined symbols for architecture x86_64:
"clear()", referenced from:
_main in main-a61991.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我一直试图将一些函数移动到一个source.cpp文件中,并在header.h文件中包含原型。当我在main.cpp文件中拥有它时,代码工作正常。当我将函数原型移动到头文件时,它也有效。但是,当我然后将函数移动到源文件时,它会让我错误!以下是我的代码的相关部分:
的main.cpp
#include <string>
#include <iostream>
using namespace std;
#include "header.h"
int main()
{
char quit, choice;
int term, day, hour;
string termName, dayName;
clear();
return 0;
}
header.h
#define TERMS 4
#define DAYS 7
#define HOURS 8
struct TTcell
{
string subject;
string lecturer;
string roomName;
};
struct TTcell timetables[8][7][4];
void clear();
source.cpp
#include <string>
#include <iostream>
using namespace std;
#include "header.h"
void clear()
{
for (size_t i = 0; i < TERMS; i++) {
for (size_t j = 1; j <= DAYS; j++) {
for (size_t k = 1; k <= HOURS; k++) {
timetables[k][j][i].subject = "";
timetables[k][j][i].lecturer = "";
timetables[k][j][i].roomName = "";
}
}
}
}
这是一个使用一个函数来保持问题可读的示例。他们似乎都有同样的痛苦。我在其他帖子上看到,由于他们使用的编译器,人们有类似的错误。我尝试过c ++,g ++和clang ++,但都无济于事。
提前感谢您提出的任何想法!
答案 0 :(得分:2)
您可以通过两种方式进行此编译。
g++ main.cpp source.cpp -o main
g++ -c main.cpp
g++ -c source.cpp
g++ -o main main.o source.o
答案 1 :(得分:1)
这是引入源文件的标准失败,与编译器无关。
Henrys-MacBook-Pro-2:assignment1 HenryDashwood$ clang++ main.cpp
你没有建立&amp;链接source.cpp
。
因此,就Clang所知,clear()
的定义确实不存在。
Henrys-MacBook-Pro-2:assignment1 HenryDashwood$ clang++ main.cpp source.cpp