VS 下正常的代碼移植到 Linux,g++ main.cpp 報錯 undefined reference to `Person::Person(...),但將 Person 類代碼直接寫在 main.cpp 前則正常。
g++ main.cpp **僅編譯 main.cpp**,Person.cpp 未參與編譯,鏈接階段找不到 Person 的構造函數、成員函數定義,導致「未定義的引用」。
g++ main.cpp Person.cpp -o main
g++ -c main.cpp -o main.o
g++ -c Person.cpp -o Person.o
g++ main.o Person.o -o main
VS 專案系統自動將專案內所有 .cpp 加入編譯單元,開發者無感知;Linux 手動編譯需顯式列出所有源文件或構建腳本。
Person.h 僅提供聲明,**定義必須在 .cpp 中**並參與編譯。習慣寫 Makefile 或用 CMake,是 Linux C++ 開發的基本功。