如何在 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