連結器工具錯誤 LNK2019 C++primer5第十五章程式錯誤的解決
編寫C++第十五章15.9 文字程式再探程式時 由於初寫C++程式造成許多錯誤
最初是出現LNK2005錯誤 由於重複定義標頭檔案產生,通過查詢在每個標頭檔案前鍵入條件預處理指令如下
#ifndef NOTQUERY //如果沒有定義這個巨集
#define NOTQUERY //定義這個巨集
#include "Query_base.h"
#include"Query.h"
class NotQuery :
public Query_base
{
friend Query operator~(const Query &);
NotQuery(const Query &q):query(q){}
std::string rep() const { return "~(" + query.rep() + ")"; }
QueryResult eval(const TextQuery&)const;
Query query;
};
inline Query operator~(const Query &operand)
{
return std::shared_ptr<Query_base>(new NotQuery(operand));
}
#endif
解決標頭檔案重複定義問題。
但該方法不是總有效,由於在標頭檔案中定義了全域性函式導致該方法失效,經改正在標頭檔案中宣告函式原型,在.cpp中定義全域性函式解決問題。
同時定義主函式main時出現如下問題
錯誤 LNK2019 無法解析的外部符號 "public: __thiscall Query::Query(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]
經過查詢是由於在.cpp檔案下定義行內函數導致的問題後將該行內函數定義在標頭檔案中 錯誤消失。
程式碼:Query.cpp檔案
#include "stdafx.h"
#include "Query.h"
#include"WordQuery.h"
inline
Query::Query(const std::string &s):q(new WordQuery(s))
{
}
改程式碼在.cpp檔案下定義內聯函數出現LNK2019錯誤
現改為在Query.h檔案下定義
#include<string>
#include"QueryResult.h"
#include"TextQuery.h"
#include"Query_base.h"
#include"WordQuery.h"
class Query
{
friend Query operator~(const Query &);
friend Query operator|(const Query &, const Query &);
friend Query operator&(const Query &, const Query &);
public:
Query(const std::string&);
QueryResult eval(const TextQuery &t)const { return q->eval(t); }
std::string rep() const { return q->rep(); }
//~Query();
private:
Query(std::shared_ptr <Query_base>query):q(query) {}
std::shared_ptr<Query_base> q;
};
inline
Query::Query(const std::string &s) :q(new WordQuery(s))
{
}
錯誤消失。
相關推薦
連結器工具錯誤 LNK2019 C++primer5第十五章程式錯誤的解決
編寫C++第十五章15.9 文字程式再探程式時 由於初寫C++程式造成許多錯誤 最初是出現LNK2005錯誤 由於重複定義標頭檔案產生,通過查詢在每個標頭檔案前鍵入條件預處理指令如下 #ifndef NOTQUERY //如果沒有定義這個巨集 #define NOTQUER
C++高階程式設計 第十五章: 處理錯誤
這一章主要講了異常處理的機制, 還有異常的種類, 怎樣設計比較好, 怎樣設計使用異常處理等等. 1.到底什麼是異常 異常是一種機制: 一段程式碼發生了錯誤情況後, 就會通知另外一段程式碼. 然後程式就不會再沿著正常的程式碼路徑前進了, 遇到錯誤的程式碼會
c++ primer 第十五章習題
c++ primer 第十五章習題 練習15.1 派生類需要覆蓋的基類中的virtual成員 練習15.2 protected訪問符定義的成員可以被繼承類的成員函式及友元訪問,private只能被當前類的成員和友元訪問。 練習15.3 class Qu
第十五章 程式除錯與異常處理
15.1NSLog使用方法 15.2程式除錯方法 15.2.1使用LLDB命令除錯程式 15.2.2在系統丟擲異常處設定斷點 15.3異常處理 15.3.1異常的概念 15.3.2異常處理的概念 15.3.3Objective-C中如何進行異常處理
c++ primer 第十九章特殊工具與技術
c++ primer 第十九章特殊工具與技術 19.1 控制記憶體分配 19.1.1 過載new和delete 19.1.2 定位new表示式 19.2 執行時型別識別 19.2.1 dyna
c++ primer 第十八章用於大型程式的工具
c++ primer 第十八章用於大型程式的工具 18.1 異常處理 18.1.1 丟擲異常 18.1.2 捕獲異常 18.1.3 函式try語句塊與建構函式 18.1.4 noexcept異常說明
C++ primer 第十二章筆記之 動態內存
weak memory ont 創建 tor size prim 自動 pre 動態內存: 運算符:new,delete 智能指針: 頭文件:memory shared_ptr:允許多個指針指向同一個對象; unique_ptr:"獨占"所指向的對象; weak_ptr:
C++筆記 第十五課 類與封裝的概念---狄泰學院
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第十五課 類與封裝的概念 1.類的組合 電腦一般而言是由CPU,記憶體,主機板,鍵盤和硬碟等部件組合而成。 思考 1.學習電腦組裝需要多少時間?幾個月 2.學習電腦組裝是否
c++ primer 第十四章習題
c++ primer 第十四章習題 練習14.1 具體實現有區別 優先順序結合律和大致功能一樣 練習14.2 ostream& operator<<(std::ostream& os, const Sales_data&
c++ primer 第十四章過載運算與型別轉換
c++ primer 第十四章過載運算與型別轉換 14.1 基本概念 14.2 輸入和輸出運算子 14.2.1 過載輸出運算子<< 14.2.2 過載輸入運算子>> 14.3 算術
c++ primer 第十二章習題
練習12.1 都是4個 練習12.2 #ifndef MYSTRBLOB_H #define MYSTRBLOB_H #include <initializer_list> #include <memory> #include <stdexcept> #
c++ primer 第十九章習題
c++ primer 第十九章習題 練習19.1 2 #include <iostream> #include <cstdlib> void *operator new(std::size_t n){ std::c
c++ primer 第十八章習題
c++ primer 第十八章習題 練習18.1 (a) range_error (b range_error 會丟擲臨時物件指標 練習18.2 會銷燬函式中創造的物件,其中指標p會導致記憶體洩漏 練習18.3 可以把指標p使用智慧指標或者封裝成有解構函式的類
c++ primer 第十七章習題
c++ primer 第十七章習題 練習17.1 tuple<int,int,int> t1{10,20,30}; 練習17.2 tuple<string,vector<string>,pair<string,int>
c++ primer 第十七章標準庫特殊設施
c++ primer 第十七章標準庫特殊設施 17.1 tuple型別 17.1.1 定義和初始化tuple 17.2 bitset 型別 17.2.1 定義和初始化bitset 17
c++ primer 第十六章習題
c++ primer 第十六章習題 練習16.1 例項化是指傳遞給模板相應的模板引數,使其生成對應型別的函式體或是型別定義。 練習16.2 #include <iostream> #include <string> #include
C++Primer Plus筆記——第十五章 友元、異常和其他總結及程式清單
目錄 本章小結 程式清單 友元類 巢狀類 異常 本章小結 友元使得能夠為類開發更靈活的介面。類可以將其他函式、其他類和其他類的成員函式作為友元。在某些情況下,可能需要使用前向宣告,需要特別注意類和方法宣告的順序
C++Primer Plus筆記——第十五章 友元、異常和其他課後程式設計練習答案
課後程式設計練習答案 習題1 習題2 習題3 習題4 習題1 //tv.h #ifndef TV_H_ #define TV_H_ #include <iostream> u
C#圖解教程 第十五章 介面
介面 什麼是介面 介面是指定一組函式成員而不實現它們的引用型別。所以只能類和結構來實現介面。 這種描述比較抽象,直接來看個示例。 下例中,Main方法建立並初始化了一個CA類的物件,並將該物件傳遞給PrintInfo方法。 class CA { public str
c++ primer第五版第十五章答案
15.01 什麼是虛成員? 虛成員是基類希望派生類進行覆蓋的函式,在其成員前加關鍵字virtual,使得該成員可以實現動態繫結。 15.02 protected訪問說明符與private有何區別? private成員:即使是基類的派生類也無法直接訪問。 protected成員:基類的