《測繪生產質量管理規(guī)定》完全版
測繪生產質量管理規(guī)定
國家測繪局1997年7月發(fā)布
第一章總則
第一條為了提高測繪生產質量管理水平,確保測繪產品質量,依據《中華人民共和國測繪法》及有關法規(guī),制定本規(guī)定。
第二條測繪生產質量管理是指測繪單位從承接測繪任務、組織準備、技術設計、生產作業(yè)直至產品交付使用全過程實施的質量管理。
第三條測繪生產質量管理貫徹“質量第一、注重實效”的方針,以保證質量為中心,滿足需求為目標,防檢結合為手段,全員參與為基礎,促進測繪單位走質量效益型的發(fā)展道路。
第四條測繪單位必須經常進行質量教育,開展群眾性的質量管理活動,不斷增強干部職工的質量意識,有計劃、分層次地組織崗位技術培訓,逐步實行持證上崗。
第五條測繪單位必須健全質量管理的規(guī)章制度。甲級、乙級測繪資格單位應當設立質量管理或質量檢查機構;丙級、丁級測繪資格單位應當設立專職質量管理或質量檢查人員。第六條測繪單位應當按照國家的《質量管理和質量保證》標準,推行全面質量管理,建立和完善測繪質量體系,并可自愿申請通過質量體系認證。
第二章測繪質量責任制
第七條測繪單位必須建立以質量為中心的技術經濟責任制,明確各部門、各崗位的職責及相互關系,規(guī)定考核辦法,以作業(yè)質量、工作質量確保測繪產品質量。
第八條測繪單位的法定代表人確定本單位的質量方針和質量目標,簽發(fā)質量手冊;建立本單位的質量體系并保證其有效運行;對提供的測繪產品承擔產品質量責任。
第九條測繪單位的質量主管負責人按照職責分工負責質量方針、質量目標的貫徹實施,簽發(fā)有關的質量文件及作業(yè)指導書;組織編制測繪項目的技術設計書,并對設計質量負責;處理生產過程中的重大技術問題和質量爭議;審核技術總結;審定測繪產品的交付驗收。第十條測繪單位的質量管理、質量檢查機構及質量檢查人員,在規(guī)定的職權范圍內,負責質量管理的日常工作。編制年度質量計劃,貫徹技術標準及質量文件;對作業(yè)過程進行現場監(jiān)督和檢查,處理質量問題;組織實施內部質量審核工作。
各級質量檢查人員對其所檢查的產品質量負責,并有權予以質量否決,有權越級反映質量問題。
第十一條生產崗位的作業(yè)人員必須嚴格執(zhí)行操作規(guī)程,按照技術設計進行作業(yè),并對作業(yè)成果質量負責。
其他崗位的工作人員,應當嚴格執(zhí)行有關的規(guī)章制度,保證本崗位的工作質量。因工作質量問題影響產品質量的,承擔相應的質量責任。
第十二條測繪單位可以按照測繪項目的實際情況實行項目質量負責人制度。項目質量負責人對該測繪項目的產品質量負直接責任。
第三章生產組織準備的質量管理
第十三條測繪單位承接測繪任務時,應當逐步實行合同評審(或計劃任務評審),保證具有滿足任務要求的實施能力,并將該項任務納入質量管理網絡。合同評審結果作為技術設計的一項重要依據。
第十四條測繪任務的實施,應堅持先設計后生產,不允許邊設計邊生產,禁止沒有設計進行生產。
技術設計書應按測繪主管部門的有關規(guī)定經過審核批準,方可付諸執(zhí)行。市場測繪任務根據具體情況編制技術設計書或測繪任務書,作為測繪合同的附件。
第十五條測繪任務實施前,應組織有關人員的技術培訓,學習技術設計書及有關的技術標準、操作規(guī)程。
第十六條測繪任務實施前,應對需用的儀器、設備、工具進行檢驗和校正;在生產中應用的計算機軟件及需用的各種物資,應能保證滿足產品質量的要求,不合格的不準投入使用。
第四章生產作業(yè)過程的質量管理
第十七條重大測繪項目應實施首件產品的質量檢驗,對技術設計進行驗證。首件產品質量檢驗點的設置,由測繪單位根據實際需要自行確定。
第十八條測繪單位必須制定完整可行的工序管理流程表,加強工序管理的各項基礎工作,有效控制影響產品質量的各種因素。
第十九條生產作業(yè)中的工序產品必須達到規(guī)定的質量要求,經作業(yè)人員自查、互檢,如實填寫質量記錄,達到合格標準后,方可轉入下工序。
下工序有權退回不符合質量要求的上工序產品,上工序應及時進行修正、處理。退回及修正的過程,都必須如實填寫質量記錄。
因質量問題造成下工序損失,或因錯誤判斷造成上工序損失的,均應承擔相應的經濟責任。
第二十條測繪單位應當在關鍵工序、重點工序設置必要的檢驗點,實施工序產品質量的現場檢查,F場檢驗點的設置,可以根據測繪任務的性質、作業(yè)人員水平、降低質量成本等因素,由測繪單位自行確定。
第二十一條對檢查發(fā)現的不合格品,應及時進行跟蹤處理,作出質量記錄,采取糾正措施。不合格品經返工修正后,應重新進行質量檢查;不能進行返工修正的,應予報廢并履行審批手續(xù)。
第二十二條測繪單位必須建立內部質量審核制度。經成果質量過程檢查的測繪產品,必須通過質量檢查機構的最終檢查,評定質量等級,編寫最終檢查報告。
過程檢查、最終檢查和質量評定,按《測繪產品檢查驗收規(guī)定》和《測繪產品質量評定標準》執(zhí)行。
第五章產品使用過程的質量管理
第二十三條測繪單位所交付的測繪產品,必須保證是合格品。
第二十四條測繪單位應當建立質量信息反饋網絡,主動征求用戶對測繪質量的意見,并為用戶提供咨詢服務。
第二十五條測繪單位應當及時、認真地處理用戶的質量查詢和反饋意見。與用戶發(fā)生質量爭議時,按照《測繪質量監(jiān)督管理辦法》的有關規(guī)定處理。
第六章質量獎懲
第二十六條測繪單位應當建立質量獎懲制度。對在質量管理和提高產品質量中作出顯著成績的基層單位和個人,應給予獎勵,并可申報參加測繪主管部門組織的質量評優(yōu)活動。第二十七條對違章作業(yè),粗制濫造甚至偽造成果的有關責任人;對不負責任,漏檢錯檢甚至弄虛作假、徇私舞弊的質量管理、質量檢查人員,依照《測繪質量監(jiān)督管理辦法》的相應條款進行處理。測繪單位對有關責任人員還可給予內部通報批評、行政處分及經濟處罰。
第七章附則
第二十八條本規(guī)定由國家測繪局負責解釋。
第二十九條本規(guī)定自發(fā)布之日起施行。1988年3月國家測繪局發(fā)布的《測繪生產質量管理規(guī)定》(試行)同時廢止。
擴展閱讀:《VC++_201*入門經典》完全版[]
《VisualC++201*入門教程》
寫在前面
在我還在上學的時候,我選擇了C++,最初我用VC6作為我的IDE,我看過很多本C++的教材,有的適合我,有的不適合我,其中有一本叫《VisualC++201*入門經典》的書幫了我不少的忙。因為通常的C++教材都只會介紹C++的語法什么的,很少會告訴我們如何去編譯、運行,告訴我們什么是控制臺程序,什么事Win程序,什么是GUI程序,C++能干什么,VC和C++的區(qū)別是什么,F在有很多的朋友應該也有這些問題吧?
學C++用C++也有幾年了,算不上熟悉,算是初窺門徑吧,我想我應該做點什么幫助一下那些和曾經的我一樣困惑的朋友,特別是學生朋友,告訴他們他們所困惑的問題的答案。記得我學C++的時候,沒有人教,有的時候也走了不少彎路,甚至連調試也不會,也不知道可以通過看調用堆?凑{用次序,還自己慢慢的去搜索,好傻啊。
接下來我會做一個《VisualC++201*入門教程》系列,用來幫助初學者。剛開始學的時候是很痛苦的,這個我深有體會,特別是身邊還沒有人能夠指導一二的。內容主要涵蓋在Windows下面使用C++進行開發(fā)的常見內容,VisualStudio201*的使用,如何創(chuàng)建新項目,如何調試,如果配置項目屬性等等,另外還會介紹VisualC++201*中新加如的一些內容,包括一些新的STL組建,一些新的語法支持等等。
由于本人水平有限,其中難免有錯誤,希望大家諒解,如果大家有發(fā)現問題還請務必及時指出來,否則誤導了他人我就罪不容恕了。注意,本教程非
C++教程,不會教你C++,只
會教你如何使用VisualC++201*去練習去學習其它C++教材上面的程序。因此建議大家認真的去看其他的C++教程,在使用VisualC++201*實踐的時候如果遇到問題可以到這里來參考。推薦《C++Primer》、《C++程序設計語言》《VisualC++201*入門經典》。
第一章:關于VisualStudio、VC和C++的那些事首先,這三個東西有什么區(qū)別呢?VC和C++是相同的嗎,有什么區(qū)別呢?我剛開始學C++的時候也有這樣的問題,在這里我來替大家解釋一下他們到底是什么。
VisualStudio,我們一般都簡稱為VS,VC全稱是VisualC++,C++就不用解釋了吧?VisualStudio其實是微軟開發(fā)的一套工具集,它由各種各樣的工具組成,這就好像Office201*是由Word201*、Excel201*、Access201*等等組成的一個道理。其中VisualC++就是VisualStudio的一個重要的組成部分。VisualStudio可以用于生成Web應用程序,也可以生成桌面應用程序,在VisualStudio下面,除了VC,還有VisualC#,VisualBasic,過去還有VisualJ#,現在還有VisualF#等等組件工具,使用這些工具你可以使用C++語言、C#語言或者Basic語言(微軟改進版)進行開發(fā)。這就好比桌上放著刀、叉、筷子,你可以用它們來吃飯,無論你用什么工具都可以,因為它們都是餐具的一種。
VC,全稱是VisualC++,它只是一個工具而已。
C++是一門和C、Basic、C#、Java一個概念的東西,它是一門語言,這個概念就同漢語、英語、法語之間的關系一樣。語言的可以不同,他們有的復雜有的精簡,比如漢語,我個人認為這是這個星球上最復雜的語言;又比如電影《阿凡達》中外星人使用的語言,不過100都個單詞而已。當然,語言并沒有高低貴賤之分,而對語言掌握的好不好,說的好不好是有高下之別的。
一個語言都有哪些要素呢?語法就是其中一個重要的方面,比如你要對你所喜歡的人表達愛慕之情,那么你應該說“我愛你”,你不能說“你愛我”,因為這搞錯了主謂賓關系,因此我們通常都需要按照一定的規(guī)矩和原則表達才會讓別人正確理解我們真正的含義。在我們的漢語中有一些成語,它們通常都比較簡單短小,但是卻能表達非常強烈的感情,而且效果非常好。比如你想罵一個壞人“你實在是太變態(tài)了,這種事情都干得出來。”你可以這樣說:“你也太禽獸不如了!”對于編程的語言來說,其實也是有成語的,在我看來,這就是庫函數。通常我們在編程的時候都推薦選擇庫函數,因為它通常會比較快一些。一直以來都有不少人混淆VisualC++和VisualStudio,其實最初VisualC++發(fā)布的時候還沒有VisualStudio這個東西,VisualC++是一個獨立的開發(fā)工具,與VisualBasic等并列,最后微軟將它們整合在一起組成了VisualStudio。
VisualC++從發(fā)布起到現在已經有10個大版本了,我們這里介紹的VisualC++201*就是VisualC++10,簡稱VC10。上朔10多年,VisualC++6.0發(fā)布了,這個被稱為史上最經典的VC,現在有很多企業(yè)還在用它,大量的教材基于這個版本的VC來寫的。然而實際上VC6并沒有想象中的那么美好,孱弱的IDE,不完善的STL等等讓它越來越不適應時代的發(fā)展,同時由于后來的版本和它的差別越來越大,讓很多習慣于VC6教材的人在新版本上無所適從。VC6走向歷史的終結點其實是必然的,只在于時間問題罷了,況且大部分人都有追求最新的“嗜好”,所以這里也選擇最新版的VC來做入門教程。下面來介紹下這個VC版本和VS版本的對應關系:
VisualStudio.net(201*)-->VisualC++.net(201*)-->VisualC++7.0->_MSC_VER值1300
這個是微軟推出.net戰(zhàn)略之后的最早的一個版本的VC,這個版本相對VC6來說變化并不是很大,一些不標準的語法依然得到支持,不過IDE界面已經出現了VS時代的雛形。
VisualStuido.net201*->VisualC++.net201*->VisualC++7.1->_MSC_VER值1310
這個版本我覺得只能算是一個對.net201*的一個Patch版本,解決了一些Bug,不規(guī)范的語法依然得到支持,比如for循環(huán)變量作用域的問題。VisualStudio201*->VisualC++201*->VisualC++8.0->_MSC_VER1400
這個版本算是一個比較符合C++標準的VC版本了,微軟為這個版本的VC加入了大量的增強版的C庫函數(CRT函數),如strcpy_s之類,當然,這部分并不是C和C++標準所要求的。
VisualStudio201*->VisualC++201*->VisualC++9.0->_MSC_VER1500
這個版本應該是在Vista發(fā)布之后出的,如果你是在Vista或者Win7下面使用,那么應該選擇這個版本。這個版本與VC201*變化并不大,不過它的SP1為C++帶來一些新的STL庫組件(tr1部分),以及MFC下面的Ribbon界面。VisualStudio201*->VisualC++201*->VisualC++10.0->_MSC_VER值1600.
這個就是我們即將要介紹的版本,那么讓我們來看一下它的啟動畫面吧。
這個是VisualStudio201*中文旗艦版的啟動畫面。下一章中,我將教大家安裝、配置VS201*/VC201*,以及如何使用它來創(chuàng)建第一個C++程序。如果你沒有下載過VisualStudio201*的話,那么請你提前下載好它吧:%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/bb0975dd801291d58c1029f5.html
第二章安裝、配置和首次使用VS201*
本章將幫助大家安裝VisualC++201*,幫助大家做一些常見的配置,以及第一次使用它來寫HelloWord程序。安裝
VisualC++201*是屬于VisualStudio201*的一部分,這個在前一章中已經講解過,實際上VisualC++201*也有更多的子版本,正如Windows7有旗艦版、家庭高級版、家庭初級版一樣。在上一章的下載地址中有兩個版本可以選擇,我選擇的時候旗艦版,這個功能最全面。
如果你下載完畢了,應該有一個ISO鏡像文件,如果你是從我給的地址下載的,那么那個序列號已經被替換成正版序列號,直接安裝即可。下面是ISO文件截圖:
這就是光盤鏡像文件,我們有多種方式可以安裝它,你可以把它燒錄成光盤,也可以用虛擬光驅軟件安裝它,由于這個ISO已經被修改過了,你甚至可以直接解壓它,然后運行里面的setup.exe進行安裝。
這里我使用虛擬光驅進行說明,首先我假設你已經安裝好了虛擬光驅軟件DAEMONToolsLite,如果你還沒有安裝,請去游俠補丁網下載,因為在那里你總是能找到最新的免費版本。
接下來我們通過虛擬光驅加載剛才下載好的ISO鏡像:
在彈出的對話框中選擇我們下載好的ISO文件。這個時候,虛擬光驅里面已經替我們打開了ISO文件,有的機器可能會自動彈出安裝提示,有的不會。如果自動彈出安裝提示,那么直接通過即可,如果沒有彈出,那么用資源管理器方式進入虛擬光驅點擊Setup.exe即可開始安裝。
由于我已經安裝好了VS201*,所以接下來無法給大家截圖了,我就直接用文字描述吧。當彈出VS201*安裝程序之后點下一步,然后我們可能會看到完全最小自定義這樣的選項,我推薦大家選擇自定義,因為只有這樣我們才可以自定我們安裝的目錄。接下來會選擇安裝的組件。這個時候我們會看到大量的VS201*的組件,這里我們可以選擇是否安裝Basic是否安裝C#等等,我在網上找到一些圖片,雖然跟中文版201*不一樣,大家大概的樣子是一樣的,大家就湊合著看看吧。
下面是開始的界面,我們應該選擇安裝VS201*.
上面這個時候選擇同意。然后安裝包會開始搜集信息:
選擇目錄:
然后就是開始安裝了,注意安裝的時候可能需要重啟一兩次。
最后安裝成功:
配置
當安裝成功之后,我們就可以開始使用了,這里我先教大家做一些常見的配置,當然大家也可以直接用默認的設置,我這樣配置主要是為了方便。下面通過開始菜單來啟動VS201*吧:
如果你是第一次開始,那么可能會讓你選擇默認的環(huán)境設置,我們要使用VC當然選擇VC的配置:
出現下面的畫面表示已經成功安裝和運行了。這是起始頁面,以后你會經常見到它。
注意,你可能會沒有VAssistX這個菜單,因為這個是個外部工具,以后會給大家解釋它的用處,現在暫時忽略。接下來讓我們來做一些常見的設置。通過菜單工具》選項調出配置對話框,下面是一些常見的設置:
調處行號,選擇文本編輯器,所有語言,把行號打成勾。如果你想調整字體或者顏色,那么可以在這里選擇:
單擊工具欄的空白區(qū)域,讓我們把生成工具欄調出來:
這樣我們就可以直接在工具欄上面選擇編譯項目、編譯整個解決方案、運行程序和調試程序了。選擇生成工具欄旁邊的小三角形可以自定,我們還可以添加一些按鈕:
單擊自定義界面下面的添加按鈕就可以添加新的按鈕了,現在我們把開始執(zhí)行(不調試)添加工具欄中:
以前經常有人問我為什么我的程序閃一下就沒了,這就是因為它們把調試(F5,那個實心的三角形)當成了運行(不調試,Ctrl+F5,空心帶尾巴的三角形)了。當然是一閃而過啦。關于調試以后說到。
HelloWorld.
下面讓我們用VC++201*也就是VC10來做一個控制臺的HelloWorld程序吧。VC201*里面不能單獨編譯一個.cpp或者一個.c文件,這些文件必須依賴于某一個項目,因此我們必須創(chuàng)建一個項目。有很多種方法都可以創(chuàng)建項目,可以通過菜單:文件,新建,項目;也可以通過工具欄點擊新建項目進行創(chuàng)建。這里我們點擊起始頁面上面的新建項目:
點擊之后進入新建項目向導:
上面選擇Win32控制臺應用程序,名稱中輸入HelloWorld點確定,至于是否為解決方案創(chuàng)建目錄我們暫時不管,那主要區(qū)別在于解決方案是否和項目文件在同一目錄。
接下來進入創(chuàng)建頁面,在Win32應用程序向導的第一個頁面直接點下一步即可:
下個頁面記得選擇空項目,我們不需要預編譯頭:
點擊完成。
這時候一個空的項目編譯成功了,我們不妨編譯一些試試。點擊剛才添加的生成工具欄的生成按鈕:
這時候我們會遇到編譯錯誤,為什么呢?因為我們還沒有Main函數,對于一個C++項目來說,一定要有一個且僅有一個main函數(Windows程序需要WinMain,區(qū)別以后再講),可以是隱式提供也可以是顯式提供,至于區(qū)別以后會講到。現在讓我們記住這個錯誤,以后遇到這個錯誤的時候一定要想想,我們項目中是否有Main函數。注意這時候即使你托一個有Main函數的文件到VC10中進行編譯也是沒有意義的,因為那個文件并不是我們項目的一部分。
現在我們可以添加一個代碼文件進來了,這個代碼文件可以是已經存在的也可以是新建的,這里新建一個。右鍵單擊項目名稱,選擇添加,新建項:
在向導中選擇代碼、C++文件(.cpp),名稱輸入Main,確定。
這時候已經成功添加了一個Main文件,注意添加新文件的時候要防止重名:然后我們輸入最簡單的幾行代碼,然后編譯它吧,編譯方法和上面一樣。
如果編譯成功你會看到上面的畫面,如果失敗會有錯誤提示,那么你可以根據提示去修改項目配置或者代碼。然后讓我們用Ctrl+F5或者點那個空心三角形運行一下吧:OK了,接下來你可以通過更改這個程序去練習C++教材上面的程序了。
這一章的內容就是這么多了,下一章中我們將討論以下內容:什么是C++?什么是編程等等。
第三章關于C++的一些問題
這一回我自己都不知道應該寫點什么好,或許今天的篇幅會比往常短很多。我說過,這不是C++的教程,因為我還沒有那個能力來教大家C++,我能做的,是分享一些學習的經驗,以及教新手如何使用VC201*這個工具去練習和實踐其它C++教材上面的程序,如《C++Primer》等。今天說的是我學習和使用C++這些年來對C++的一些理解,這樣的日志其實是最難寫的,因為眾口難調,為什么這么說呢?同樣的一段音樂不同的人去傾聽都會有不同的感受,不同的心境去聽也會有不同的感覺。記得當年我在聽雅尼的《IfIcouldtellyou》聽到的是無盡的傷感和無奈,而我的朋友卻怎么也聽不出來,呵,你去聽聽之后會有什么感覺?好,回歸正題吧。什么是編程
下面這段話我是從百度百科“編程”詞條復制過來的,不敢掠人之美:
編程就是讓計算機為解決某個問題而使用某種程序設計語言編寫
程序代碼,并最終得到結果的過程。為了使計算機能夠理解人的意圖,人類就必須要將需解決的問題的思路、方法、和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算機之間交流的過程就是編程。
這段話說的比較明白,我們如果想讓計算機按照我們想要的方式工作,那么我們必須給它命令,有的常見的任務已經由操作系統幫助我們提供了,操作系統將一些簡單的指令封裝成一個簡單的操作,使得我們的操作更容易更簡單,然而操作系統提供的操作始終是有限的,如果要擴展計算機的軟件系統,就需要編程了。什么是編程語言
如上所說,編程語言就是人類與計算機交流的橋梁。首先編程語言必須是計算機可以理解的或者是可以間接轉換成計算機可以理解的指令的東西。打個比方,如果你在一臺普通電腦面前站著,大叫道:“電腦,給哥把C盤根目錄下面的A文件拷貝到D盤根目錄下面去”。我猜想你就算叫上一天也沒用,因為普通的電腦無法識別你的指令,這就算是對“機”彈琴吧。什么是編譯器
如上所說,編程語言是計算機可以直接理解的如機器碼或者可以間接轉換成計算機可以理解的指令的東西。那么C++就屬于后者,那么是什么把C++翻譯成計算機可以識別的指令的呢?這就是編譯器。什么是
C++
我不想說C++的歷史了,我想說,它是一門編程語言,它可以通過編譯器的翻譯成為計算機可以識別的指令。比如我們常見的C++代碼:inta=3+1;cout些新的類,引用一些新的命名空間,其實C++也是這樣的,要做更具體的事情,就需要除C++本身之外的更多東西才行。
因此,要用C++來做事情,除了C++的基本語法之外,還需要學習一些其它一些內容如WindowsAPI、MFC、DirectX3DAPI等。C++、C#、Java
到底誰好?
對于這個問題,我想說的是:語言無貴賤,技術有高低。其實無論什么語言,它們在這里都是編程語言,也許它們看起來不一樣,它們用起來也不一樣,它們的“翻譯”編譯器不一樣,但是它們的本質作用就是要用它們自己的方式將我們人類的解決問題的方法、思路和流程告知給計算機。這也就是為什么C++、C#、Java可以相互交互的原因。
每個語言就像江湖上的各門派的武功一樣,其實真的沒有高下之分,只有個人的修為,少林武功就一定強于武當么?《碧血劍》中袁承志不也用普普通通的五行拳擊潰了榮彩么?只是不同的武功在不同的條件下表現不同,他們各自占據了自己有利的地位罷了,以楊家槍法為例,或許二人比武它不厲害,但是征戰(zhàn)沙場估計是再適合不過了。
因此不要再糾結什么語言好,什么語言流行了,選擇一個自己喜歡的方向,然后調查好那個方向最常用最適合的語言,然后集中注意力堅持的去學習它,這就好了。
今天的內容就是這些,希望對大家有幫助。請大家務必好好學習C++教材,并使用VC201*好好演練,最好能夠舉一反三自己創(chuàng)造問題自己解決!多看看百度知道C/C++下面的那些問題,每解決一個那樣的問題,你自己也會進步。
第四章VC201*中初學者常見錯誤、警告和問題這一章將幫助大家解釋一些常見的錯誤、警告和問題,幫助大家去理解和解決一些常見問題,并了解它的根本原因。iostream.h
與下面的代碼為什么在VC201*下面編譯不過去?#includeintmain(){
cout錯誤信息:fatalerrorC1083:無法打開包括文件:“iostream.h”:Nosuchfileordirectory
造成這個錯誤的原因在于歷史原因,在過去C++98標準尚未訂立的時候,C++的標準輸入輸出流確實是定義在這個文件里面的,這是C風格的定義方法,隨著C++98標準的確定,iostream.h已經被取消,至少在VC201*下面是這樣的,取而代之的是我們要用頭文件來代替,你甚至可以認為是這樣定義的:namespacestd{
#include"iostream.h"}
因此我們可以簡單的修改我們的HelloWorld。#includeusingnamespacestd;intmain(){
cout上面的strcpy會產生這個警告:
warningC4996:"strcpy":Thisfunctionorvariablemaybeunsafe.Considerusingstrcpy_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.Seeonlinehelpfordetails.
這是因為VC從201*版本開始,微軟引入了一系列的安全加強的函數來增強CRT(C運行時),這里對應的是strcpy_s。_s意為safe的意思,同樣的道理,strcat也是同樣。因此要解決這個問題,我們可以用strcpy_s來替換strcpy,但是注意strcpy_s并非所有編譯器都提供,因此如果要跨編譯器,請采用錯誤信息中所提示的方式,定義
_CRT_SECURE_NO_WARNINGS宏來掩耳盜鈴吧。另外注意并非所有的加強函數都是在屁股后面加_s,比如stricmp這個字符串比較函數的增強版名字是_stricmp。下面,用strcpy_s來更改程序:intmain(){
charsz[128]={0};
strcpy_s(sz,"HelloWorld!");coutreturn0;}
貌似沒什么問題吧?錯了,如果你是按照我教你的方法創(chuàng)建的控制臺空工程的話,那么會有編譯錯誤:
errorC2664:“MessageBoxW”:不能將參數2從“constchar[17]”轉換為“LPCWSTR”
這個問題太普遍了,幾乎所有的初學者都會遇到而且感到難以應付,因為按照提示使用(LPCWSTR)強制轉型貌似并不能幫助我們解決問題,而且這個程序在VC6下面應該是沒有任何問題的,那問題出現在哪里呢?問題在這里,請右鍵單擊解決方案瀏覽器下面的項目,屬性,問題的根本就是字符集問題,在VC6中,我們默認使用的是多字節(jié)字符集,而現在我們默認需要的是UNICODE字符集,簡單的,我們把這個字符集改成多字節(jié)字符集這個問題就解決了:
再試試應該就可以了吧?但是我并不推薦大家這么做,因為讓自己的程序適應各種字符集是我們寫代碼的人義不容辭的義務。我們把程序改成下面這樣:#include#include#includeusingnamespacestd;
intmain(){
MessageBox(NULL,TEXT("你好HelloWorld!"),TEXT("Information"),0);MessageBox(NULL,_T("你好HelloWorld!"),_T("Information"),0);return0;}
用兩個宏TEXT或者_T都可以解決這個問題,它們兩個并沒有太大區(qū)別,也許區(qū)別在于前者是通過windows.h頭文件引入的,而_T是通過tchar.h引入的,我推薦大家使用_T和tchar.h,因為tchar.h還幫助我們引入了其它一些很有用的宏,比如_tcscpy_s,這個宏在使用UNICODE字符集的時候被替換成wcscpy_s,在使用多字節(jié)字符集的使用被替換成strcpy_s。關于這部分的內容,請大家不要錯過《Windows核心編程》的第二章(第四版或第五版都可以),以及《深入學習C++String2.1版》。它們都有提到。有人聽說_T可以把多字節(jié)字符串轉換成UNICODE,因此他寫了如下的代碼:constchar*pStr="haha哈哈";
MessageBox(NULL,_T(pStr),_T("Information"),0);
當然,除非你運氣好的抓狂,否則你是編譯不過去的,為什么呢?我們現在應該知道對于"Hello"這樣的字符串,VC201*會默認的將它視為constchar*,即多字節(jié)字符串,而L"Hello"前面有個L前綴的被視為UNICODE字符串,這和C#是有區(qū)別的,因為C#的字符串總是被視為UNICODE,C++/CLI下面編譯器也會幫助我們做到這件事情,所以它們不需要L(C++/CLI兼容L這種寫法)。讓我們看看_T的定義吧:
#definewxCONCAT_HELPER(text,line)text##line
/*couldalreadybedefinedbytchar.h(it"squasistandard)*/#ifndef_T
#if!wxUSE_UNICODE#define_T(x)x#else/*Unicode*/
/*usewxCONCAT_HELPERsothatxcouldbeexpandedifit"samacro*/#define_T(x)wxCONCAT_HELPER(L,x)#endif/*ASCII/Unicode*/#endif/*!defined(_T)*/
_T在UNICODE下面最終會被替換成L##x。##是一個編譯預處理指令,意味著讓L和x貼在一起,比如L##"Hello"最終就是L"Hello",因此它可以把"Hello"轉換成UNICODE字符串。那為什么上面的程序不行呢?讓我們看看_T("pStr")會被替換成什么:L##pStr->LpStr,哦,LpStr是一個新的標識符,如果你沒有定義過它,你當然不能通過編譯啦。因此我們可以了解到_T這樣的宏只能處理直接的常量字符串,不能處理其它的情況。而我們上面演示的那種情況需要我們動態(tài)的去轉換編碼,Windows有API可以幫助我們做到,C庫也有函數可以幫助我們。恰好我曾經寫過這樣的代碼,歡迎大家參考:ASCII/UNICODE/UTF8字符串互相轉換的C++代碼
對于_T宏,再說一點東西,或許你會感到奇怪為什么_T不直接定義成#define_T(x)L##x,而要繞個圈子去調用wxCONCAT_HELPER呢?這實際上涉及到宏展開順序和截斷的問題。在這里,我們需要說一個宏參數的概念,這很函數的參數是類似的,這里_T(x)的x就是宏參數,好,記住下面一句話:
如果你定義的宏中使用了#或者是##的話,宏參數將不會被展開,也就是說_T(x)如果直接定義成L##x那么在下面這種情況就會出錯(PS:#是給參數加引號的意思):
_T(__FUNCTION__),__FUNCTION__是一個預定義的宏,它代表了當前函數的名字,這個展開會是什么呢?L__FUNCTION__。為什么間接調用wxCONCAT_HELPER就能得到正確的結果呢?因為當我們調用wxCONCAT_HELPER的時候,__FUNCTION__已經被_T展開成了函數名。
說多了說多了,如果你覺得復雜可以暫時跳過這些東西,我只是順便說說。重定義的編譯錯誤和鏈接錯誤讓我們在項目里面再添加一個Test.h頭文件,方法是右擊解決方案中的項目,添加,新建項,C++頭文件,名稱輸入test.h。然后我們在test.h中輸入:/*#pragmaonce*/voidprint(){}
回到main.cpp中:#includeusingnamespacestd;#include"Test.h"#include"Test.h"intmain(){return0;}
編譯一下我們會得到重定義的編譯錯誤:errorC2084:函數“voidprint(void)”已有主體
或許你會說,你引用(#include)了兩次,我沒你那么傻,我只引用一次不就好了么?是的。你聰明,但是是小聰明哈,因為你不能保證每個人都不去引用它。
這個問題演示的是#pragmaonce的用處,讓我們解開它的注釋。編譯成功!#pragmaonce的作用就在于防止頭文件被多次引用。你或許見過#ifndef__TEST_H__#define__TEST_H__代碼#endif
這樣的代碼,它們的作用是一樣的,如果你跟我一樣懶,那么就用#pragmaonce,如果你打算去沒有這個指令的編譯器上編譯代碼,那么還是用后面一種方式吧。
現在讓我們來見識一個對初學者稍微復雜一點的鏈接錯誤,用創(chuàng)建main.cpp的方法再添加一個test.h頭文件,輸入#include"Test.h"即可。
讓我們再編譯一次。
1>test.obj:errorLNK201*:"void__cdeclprint(void)"(?print@@YAXXZ)已經在Main.obj中定義
1>e:\\documents\\visualstudio201*\\Projects\\HelloWorld\\Debug\\HelloWorld.exe:fatalerrorLNK1169:找到一個或多個多重定義的符號
如果說編譯錯誤好找的話,鏈接錯誤對于初學者來說就有點麻煩了,聰明的初學者會去Google、百度尋找答案,笨的初學者就會找所謂的高手、前輩問,而這些高手Or前輩未必有心情為你解釋。要解決這個錯誤有無數種方法。1.內聯,把print聲明為內聯函數。inlinevoidprint(){}
這個方法的好處是簡單,壞處是局限性太強,意味著你總是需要公開print的實現,因為內聯函數必須在編譯時就知道實現才行。2.static,把print聲明為static函數:staticvoidprint()。
這便告訴編譯器,哥是唯一的,而且哥只能被本編譯單元的代碼調用,這和extern是對應的。簡單來說,想要哥幫你做事,請先include哥聲明的頭文件,也就是#include"test.h"。3..h頭文件中只放聲明,實現放到.cpp中去。
現在test.h中只有voidprint();,而實現在test.cpp中:#include"Test.h"voidprint(){
inta=1;
cout
我把不同功能的代碼和文件放在不同的Filter下面,如何添加這樣的Filter呢?
這樣就可以添加篩選器了,默認情況下VS為我們創(chuàng)建三個篩選器:頭文件、源文件和資源文件,實際上我們可以再增加很多。這樣區(qū)分開的好處就是各個功能的代碼被分開了,在文件很多的情況下不會造成混亂。如TextSearcher,它的搜索算法、軟件控制邏輯、自定義控件、GUI模塊、線程化操作都是分開的,這樣我可以很容易找到我想找的文件,而且還可以檢視自己的模塊劃分是否合理等等。
接下來推薦大家在項目資源瀏覽器中為不同的文件劃分目錄。
比如上圖將頭文件和源文件、資源圖標文件、本地化文件和配置文件分開組織,這樣也是為了防止混亂。值得注意的是當我們把文件用文件分開的時候,需要在項目屬性設置里面包含我們的子目錄,否則我們無法在源文件中直接用#include指令包含我們的頭文件。如下圖所示這樣的情況,如果不添加,無法找到頭文件。
如下圖所示,找到項目屬性中,C++,常規(guī)中把我們的子目錄作為附加路徑添加到“附加包含目錄”中。
使用SVN或其它源代碼管理工具管理我們的項目
如果你打算寫一個比較大一點的項目,我推薦你使用源代碼管理工具來管理你的C++項目,你可以選擇SVN,也可以選擇其它的,我推薦SVN,因為簡單容易上手。當你在做一個很復雜的東西的時候,花了兩三天的時間去做修改,不過后來發(fā)現這個修改并不合適,想還原到三天以前,如果你沒有用源代碼管理工具管理自己的項目也沒有自己手動的備份,那恭喜你,你得開始人肉還原了,這是多么悲劇的一件事情啊,然而如果你使用了SVN管理的話,只需要在三天前開始修改前的最后一次穩(wěn)定版本Commit一次,三天之后如果要還原,只需要使用工具Revert就好了,而且不但可以回到三天前的版本,你甚至可以回到以前每一次Commit的版本,(⊙o⊙)哇,這是多么好的工具!要使用SVN,首先需要SVN客戶端,SVN服務器是可選的。我推薦大家使用TortoiseSVN這個SVN客戶端,因為它簡單易用、免費,支持Windows32Bit、64Bit,你可以去他們的官方網站下載,地址點我。有了這個工具當然還不夠,為了讓我們的SVN跟VS201*結合的更緊密,我們需要再下載一個SVNForVS的插件,我強烈推薦你使用它,因為它也非常簡單易用,下載地址點我。最新版是支持VS201*的。當你裝了這個插件的時候,如果你的項目是在SVN的管理之下,那么你的項目看起來會一些不同:
看到文件左邊的勾了嗎?灰色的勾表示正常,而橙色的勾表示已經更改了,而PendingChanges則告訴我們哪些文件時新加的,哪些文件被改過了,如果要還原的話,只需要選擇該文件,右鍵點擊,Revert就好了:
如果你已經安裝好了AnkhSVN插件但是又看不到的話,那么請檢查下系統選項卡里面是否選擇了它作為默認的源代碼管理工具:
回過頭去繼續(xù)說SVN,當我們安裝好TortoiseSVN之后(安裝后可能需要重啟),我們在資源管理器中點擊右鍵的時候就能看到它的菜單了:
雖然TortoiseSVN有中文語言包,但是我推薦大家使用英文的,就像古詩一定要用中文來表達一樣,沒有比英語單詞表達SVN項目管理更恰當的詞了。
SVNCheckOut可以讓你獲取其它地方SVN服務器上面的某個項目的源碼,當然,前提是你要有權限才行,現在讓我們試試。隨便找個盤符如F盤,點右鍵,選擇SVNCheckOut,然后UrlofRepository中輸入svn://這個地址,其它的不變,點擊OK。如圖所示:
如果不出意外你能看到:
如果你看到這個畫面說明你已經CheckOut成功了,那么恭喜你,你已經取到了TextSearcher的源碼,當然要說一點的是,這個源碼可能你取到之后編譯不了,因為還有另外一些依賴項如dbsoft、boost、wxWidgets并不在這個SVN上面。
這樣大家就可以去一些開源的網站上面Check你想要的東西了,哈哈。推薦大家去這個網站找自己感興趣的代碼CheckOut:
現在我們說如何管理自己的項目,大家可以像我一樣去一些提供免費SVN服務器服務的網站上面注冊一個賬號建立項目就好了,比如說我使用的這個,這個畢竟是國內的,另外上面的sourceforge.net也可以。當你注冊建立項目成功之后就可以通過菜單Import把需要導入的東西導入到SVN服務器了:
導入界面的地址欄輸入我們的SVN服務器地址即可,類似于:svn://。導出的時候記得輸入日志。除了可以導入SVN服務器之外,我們還可以使用文件協議在自己的電腦上管理我們的代碼,如果你不需要在多臺電腦上面共同維護這個項目的話。
讓我們隨便找個地方新建一個文件夾,如D:\\TestSVNServer這個文件夾,然后對著這個新建的文件夾點右鍵,選擇SVN>Createrepositoryhere,OK,你的本地SVN服務器已經建好了。如果創(chuàng)建成功,你會發(fā)現這個文件夾里面多了好多東西:
沒關系,這是SVN服務必須要的一些東西,現在讓我們使用文件協議導入我們的項目到該SVN服務器中,找到我們要導入的項目,跟導入網絡上的SVN服務器一樣,右擊項目文件夾,SVN>Import。在Import界面中這樣填:
不出意外你會導入成功,那么現在我們需要去其它地方重新獲取這些東西了,換個地方,比如F盤根目錄,選擇SVNCheckOut,然后地址輸入剛才導入的地址:
友情提示:本文中關于《《測繪生產質量管理規(guī)定》完全版》給出的范例僅供您參考拓展思維使用,《測繪生產質量管理規(guī)定》完全版:該篇文章建議您自主創(chuàng)作。
來源:網絡整理 免責聲明:本文僅限學習分享,如產生版權問題,請聯系我們及時刪除。