如何在 C++ 中包含头文件和实现文件?
How do you include header and implementation files in c++?
我正在学习 c++,讲师制作了一个视频,介绍如何在多个文件中制作 类 和函数。
我有 3 个简单的 c++ 文件,名为“main.cpp”、“something.h”和“something.cpp”,它们都在同一个目录中,没有其他文件。 (他们在下面)
问题是链接器抛出一条错误消息,我真的不知道为什么。 (也许我只是遗漏了一些非常明显的东西)
// main.cpp
#include <iostream>
#include "something.h"
int main(){
int a{2}, b{2};
std::cout << add(a,b) << std::endl;
int arr[5] {1,2,4,8,16};
print_arr(arr, 5);
std::cout << "Hello, world\n";
return 0;
}
// something.h
#ifndef _SOMETHING_H_
#define _SOMETHING_H_
int add(int a, int b);
void print_arr(int* arr, unsigned int size);
#endif // _SOMETHING_H_
// something.cpp
#include "something.h"
#include <iostream>
int add(int a, int b){
return a+b;
}
void print_arr(int* arr, unsigned int size){
std::cout << "{ ";
for (int i = 0; i < size; i++)
std::cout << arr << ' ';
std::cout << '}';
}
错误:
Undefined symbols for architecture x86_64:
"add(int, int)", referenced from:
_main in main-06aa98.o
"print_arr(int*, unsigned int)", referenced from:
_main in main-06aa98.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
最简单的,clang++ -Wall -g something.cpp main.cpp -o main
.
您也可以先编译 something.cpp
以创建 something.o
...
clang++ -Wall -g -c something.cpp
...然后在编译时指定link main.cpp
:
clang++ -Wall -g main.cpp something.o
最后一种方法扩展性更好,就好像您只更改 main.cpp
就可以执行第二步而无需重新编译 something.o
。
我正在学习 c++,讲师制作了一个视频,介绍如何在多个文件中制作 类 和函数。
我有 3 个简单的 c++ 文件,名为“main.cpp”、“something.h”和“something.cpp”,它们都在同一个目录中,没有其他文件。 (他们在下面)
问题是链接器抛出一条错误消息,我真的不知道为什么。 (也许我只是遗漏了一些非常明显的东西)
// main.cpp
#include <iostream>
#include "something.h"
int main(){
int a{2}, b{2};
std::cout << add(a,b) << std::endl;
int arr[5] {1,2,4,8,16};
print_arr(arr, 5);
std::cout << "Hello, world\n";
return 0;
}
// something.h
#ifndef _SOMETHING_H_
#define _SOMETHING_H_
int add(int a, int b);
void print_arr(int* arr, unsigned int size);
#endif // _SOMETHING_H_
// something.cpp
#include "something.h"
#include <iostream>
int add(int a, int b){
return a+b;
}
void print_arr(int* arr, unsigned int size){
std::cout << "{ ";
for (int i = 0; i < size; i++)
std::cout << arr << ' ';
std::cout << '}';
}
错误:
Undefined symbols for architecture x86_64:
"add(int, int)", referenced from:
_main in main-06aa98.o
"print_arr(int*, unsigned int)", referenced from:
_main in main-06aa98.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
最简单的,clang++ -Wall -g something.cpp main.cpp -o main
.
您也可以先编译 something.cpp
以创建 something.o
...
clang++ -Wall -g -c something.cpp
...然后在编译时指定link main.cpp
:
clang++ -Wall -g main.cpp something.o
最后一种方法扩展性更好,就好像您只更改 main.cpp
就可以执行第二步而无需重新编译 something.o
。