• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我輩豈是蓬蒿人!

            C++ && keyWordSpotting

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              11 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(9)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 7078
            • 排名 - 1377

            最新評論

            閱讀排行榜

            評論排行榜

            ???學習數據結構,用到了輸入輸出運算符重載,結果編譯之下,錯誤重重,,隨即停止學習進度,追查禍源,在花費巨大腦力與時間成本之后,終于知自己錯誤之所在,定位于名字空間之困擾。為牢記教訓,寫一簡化版本記錄 debug 過程如下,警示自己。

            問題
            ???

            ???有如下兩個代碼文件:
            ???// 20060816_operator.cxx

            ?1?#include?<iostream>
            ?2?using?namespace?std;
            ?3?#include?"20060816_operator.h"
            ?4?int?main(int?argc,?char*?argv[])
            ?5?{
            ?6?????const?std::string?GHH("GuoHonghua");
            ?7?????Honghua?ghh(GHH);
            ?8?????cout?<<?ghh?<<?endl;
            ?9?????return?0;
            10?}
            ???

            // 20060816_operator.h

            ?1?#ifndef?_20060816_OPERATOR_GHH_
            ?2?#define?_20060816_OPERATOR_GHH_????1
            ?3?
            ?4?//?Author?:?GuoHonghua
            ?5?//?Date?:?2006.08.16
            ?6?//?File?:?20060816_operator.h
            ?7?
            ?8?#include?<iostream>
            ?9?#include?<string>
            10?class?Honghua
            11?{
            12?????friend?std::ostream&?operator<<(std::ostream&?os,?const?Honghua&?ghh);
            13?public:
            14?????Honghua(const?std::string&?ghh)?:?_ghh(ghh)
            15?????{
            16?????}
            17?
            18?private:
            19?????std::string?_ghh;
            20?};
            21?
            22?std::ostream&?operator<<(std::ostream&?os,?const?Honghua&?ghh)
            23?{
            24?????os?<<?ghh._ghh;
            25?????return?os;
            26?}
            27?
            28?#endif?//?end?of?_20060816_OPERATOR_GHH_

            用上面兩個文件建立工程,vc6.0下編譯會出錯。報告如下:

            --------------------Configuration: 20060816_operator - Win32 Debug--------------------

            Compiling...

            20060816_operator.cxx

            f:\ghh_project\cxxdetail\20060816_operator.h(24) : error C2248: '_ghh' : cannot access private member declared in class 'Honghua'

            ??????? f:\ghh_project\cxxdetail\20060816_operator.h(19) : see declaration of '_ghh'

            F:\ghh_project\CxxDetail\20060816_operator.cxx(8) : error C2593: 'operator <<' is ambiguous

            Error executing cl.exe.

            ?

            20060816_operator.exe - 2 error(s), 0 warning(s)
            解決:
            ???

            1.? 調整名字空間聲明和自定義頭文件的次序,如下:

            1?#include?<iostream>
            2?#include?"20060816_operator.h"
            3?using?namespace?std;
            4?int?main(int?argc,?char*?argv[])
            5?

            2.? 把類定義于標準名字之內,20060816_operator.h文件修改如下(不推薦)

            ?1?#ifndef?_20060816_OPERATOR_GHH_
            ?2?#define?_20060816_OPERATOR_GHH_????1
            ?3?
            ?4?//?Author?:?GuoHonghua
            ?5?//?Date?:?2006.08.16
            ?6?//?File?:?20060816_operator.h
            ?7?
            ?8?#include?<iostream>
            ?9?#include?<string>
            10?namespace?std
            11?{
            12?????class?Honghua
            13?????{
            14?????????friend?std::ostream&?operator<<(std::ostream&?os,?const?Honghua&?ghh);
            15?????public:
            16?????????Honghua(const?std::string&?ghh)?:?_ghh(ghh)
            17?????????{
            18?????????}
            19?????????
            20?????private:
            21?????????std::string?_ghh;
            22?????};
            23?????
            24?????
            25?????std::ostream&?operator<<(std::ostream&?os,?const?Honghua&?ghh)
            26?????{
            27?????????os?<<?ghh._ghh;
            28?????????return?os;
            29?????}
            30?}
            31?#endif?//?end?of?_20060816_OPERATOR_GHH_?

            3.? 使用頭文件iostream.h代替iostream,比較落后的方式(不推薦!

            ?1?//?20060816_operator.cxx
            ?2?//?#include?<iostream>
            ?3?#include?<iostream.h>
            ?4?#include?<iostream.h>
            ?5?#include?"20060816_operator.h"
            ?6?int?main(int?argc,?char*?argv[])
            ?7?{
            ?8?????const?std::string?GHH("GuoHonghua");
            ?9?????Honghua?ghh(GHH);
            10?????cout?<<?ghh?<<?endl;
            11?????return?0;
            12?}?

            ?1?//?20060816_operator.h
            ?2?#ifndef?_20060816_OPERATOR_GHH_
            ?3?#define?_20060816_OPERATOR_GHH_????1
            ?4?
            ?5?//?Author?:?GuoHonghua
            ?6?//?Date?:?2006.08.16
            ?7?//?File?:?20060816_operator.h
            ?8?//?#include?<iostream>
            ?9?#include?<iostream.h>
            10?#include?<string>
            11?
            12?class?Honghua
            13?{
            14?????friend?ostream&?operator<<(ostream&?os,?const?Honghua&?ghh);
            15?public:
            16?????Honghua(const?std::string&?ghh)?:?_ghh(ghh)
            17?????{
            18?????}
            19?????
            20?private:
            21?????std::string?_ghh;
            22?};
            23?
            24?
            25?ostream&?operator<<(ostream&?os,?const?Honghua&?ghh)
            26?{
            27?????os?<<?ghh._ghh;
            28?????return?os;
            29?}
            30?
            31?#endif?//?end?of?_20060816_OPERATOR_GHH_

            4.? 任何時候都不使用using namespace 聲明!這是只需要修改20060816_operator.cxx文件如下:

            ?1?#include?<iostream>
            ?2?#include?"20060816_operator.h"
            ?3?int?main(int?argc,?char*?argv[])
            ?4?{
            ?5?????//?const?string?GHH("GuoHonghua");
            ?6?????const?std::string?GHH("GuoHonghua");
            ?7?????Honghua?ghh(GHH);
            ?8?????//?cout?<<?ghh?<<?endl;
            ?9?????std::cout?<<?ghh?<<?std::endl;
            10?????return?0;
            11?}

            體會
            ???名字空間本來就是為了解決名字沖突問題而引入,以使標準庫不受外界影響。在這個意義上來說,
            using namespace std;不是可以隨意使用的語句,應該考慮到它的位置對程序的可能影響,而最徹底的杜絕錯誤的解決辦法是在任何時候任何情況下都不使用此語句!

            posted on 2006-08-16 21:09 keyws 閱讀(401) 評論(0)  編輯 收藏 引用 所屬分類: 程序調試
            久久五月精品中文字幕| 久久综合鬼色88久久精品综合自在自线噜噜| 人妻无码精品久久亚瑟影视| 亚洲精品乱码久久久久久不卡| 久久人人爽人人人人爽AV| 久久w5ww成w人免费| 精品乱码久久久久久夜夜嗨| 久久亚洲国产最新网站| 国产一级持黄大片99久久| 国内精品久久国产| 99久久亚洲综合精品网站| 漂亮人妻被中出中文字幕久久| AV无码久久久久不卡网站下载 | 久久久精品国产sm调教网站 | 国产精品久久久天天影视香蕉| 久久精品成人欧美大片| 日韩久久久久久中文人妻| 人人狠狠综合久久亚洲高清| 久久男人Av资源网站无码软件| 欧美久久一级内射wwwwww.| 97久久精品国产精品青草| 久久精品国产精品亚洲精品| 久久综合九色欧美综合狠狠| 亚洲成人精品久久| 久久99国产综合精品女同| 无码人妻久久一区二区三区蜜桃| 国产精品99久久久久久宅男| 久久99国产精品尤物| 午夜久久久久久禁播电影| 奇米影视7777久久精品人人爽 | 色综合久久久久综合99| 久久午夜电影网| 久久久精品一区二区三区| 99久久国产热无码精品免费| 人妻久久久一区二区三区| 色婷婷综合久久久久中文| 久久免费看黄a级毛片| 热久久最新网站获取| 精品国产乱码久久久久软件 | 久久精品黄AA片一区二区三区| 久久久久久精品久久久久|