簡體   English   中英

如何將 cpp 和 h 文件鏈接在一起?

[英]How to link cpp and h files together?

解決了

// Solution:
// foo.c includes foo.h; bar.c includes bar.h
g++ -Wall -Wextra -Werror -pedantic -o foobar foo.cpp bar.cpp

我有兩個 cpp 文件和兩個 h 文件。 我將第一個 cpp 鏈接到同名的 h 文件,該文件鏈接到鏈接到第二個 h 文件的第二個 cpp 文件。 這是我應該將文件鏈接在一起的方式嗎?

我的程序不工作。 也有錯誤,但我需要確定這是否是錯誤的一部分。 這是定義/鏈接 cpp 和 h 文件的方式嗎?

 // file: foo.cpp
 #include "foo.h"

 // file: foo.h
 #include "bar.cpp"

 #include <string>
 #include <sstream>
 #include <iostream>
 using std::cin;
 using std::cout;
 using std::cerr;
 using std::stringstream;
 using std::string;
 using std::endl;

 // file: bar.cpp
 #include "bar.h"

 // file: bar.h
 // ...

完全錯誤。 頭文件將包含在 cpp 文件中。 Cpp 文件永遠不會包含在任何東西中。 通常,頭文件包含聲明,而 cpp 文件包含定義。

如果您的程序包含兩個 cpp 文件,則不要將其中一個包含在另一個中。 相反,您將它們一起編譯成一個可執行文件。

我猜您對聲明和定義的工作方式或包括的作用有一些誤解。 建議你刷一下課本,或者看看github上的一些小C++程序。

不。你不應該#include cpp 文件。 此外,您錯誤地使用了術語“鏈接”。

  • cpp 文件應該#include 對應的頭文件,如果有的話,在它們的第一行:bar.cpp 應該#include bar.h,foo.cpp 應該#include foo.h。
  • 每個標題都應該#included 作為相應cpp 文件中的第一個標題,即使您必須制作一個空的相應cpp 文件來#include 標題。
  • 頭文件應該#include 只包含其他頭文件
  • cpp 文件應該為它們使用的其他接口 #include 標頭,或者應該包含前向聲明,如果您可以編寫有效的前向聲明。

“鏈接”與#include無關。 這是鏈接器在編譯/匯編完成后執行的任務。 鏈接是在目標文件和庫上執行的,而不是頭文件或 cpp 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM