<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## [$]一.模板編譯 1. 模板定義時,編譯器并不生成代碼,只有實例化模板的特定版本時,編譯器才生成代碼。 2. 對于類模板,只有使用過的成員函數才會生成代碼。 3. 為了生成一個實例化版本, **編譯器需要掌握函數模板或類模板成員函數的定義** 。因此,與非模板代碼不同,模板的頭文件通常既包括聲明也包括定義。 > 假如我們將棧類 Stack 的類聲明放在頭文件 `stack.h` ,成員函數的定義放在 cpp 文件 `stack.cpp` ,然后在需要使用它的地方 `main.cpp` 只引入頭文件,那么連接的時候會報 **函數不存在** 的錯誤。 > 問題分析: > 1. 編譯器會將頭文件的代碼拷貝到 `main.cpp` ,這時,在類模板實例化(用這個類去創建對象)的時候,編譯器不能在 `main.cpp` 內找到相關成員函數的定義,就不會生成相應的代碼到 `main.obj` 。 > 2. 編譯 `stack.cpp` 時,因為沒有類模板實例化,所以編譯器不生成這些成員函數的代碼到 `stack.obj`。 > 3. 連接的時候,所有 `.obj` 文件都沒有相應成員函數的代碼,會報 **函數不存在** 的錯誤。 > > 解決方法: > 1. 將成員函數定義的代碼放入頭文件。 > 2. 使用它的時候引入 `stack.cpp` 文件,而不是引入 `stack.h` 。 ## [$]二.模板編譯與錯誤檢查 通常,編譯器會在三個階段報告錯誤: 1. 編譯模板本身時。在這個階段,編譯器通常不會發現很多錯誤。編譯器可能檢查語法錯誤,例如忘記分號或者變量名拼錯等,但也就這么多了。 2. 編譯器遇到模板使用時。在此階段,編譯器仍然沒有很多可檢查的。對函數模板調用,編譯器通常會檢查實參數目是否正確。它還能檢查參數類型是否匹配。對于類模板,編譯器可以檢查用戶是否提供了正確數目的模板實參,但也僅限于此了。 3. 模板實例化時。只有這個階段才能發現類型相關的錯誤。依賴于編譯器如何管理實例化,這類錯誤可能在鏈接時才報告。 > 簡單來說,只要不使用那些模板類,不使用相應的成員函數,那么編譯器基本上不會檢測里面的語法錯誤。 >[success] 在測試模板類時,最好用它創建一個對象,并調用其所有的成員函數。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看