簡體   English   中英

有效的c ++第3項示例

[英]Effective c++ item 3 example

我的問題是關於“Effective C ++”一書的特定項目(3)。 本書給出了這個例子,我嘗試盡可能接近vs 2010 c ++(包括iostream和string):

class TextBlock {
public: 
    const char& operator[](std::size_t pos) const
    {
        return text[pos]; 
    }
    char& operator[](std::size_t pos)
    { 
        return text[pos]; 
    }

private: 
    std::string text;
};

void print(const TextBlock& ctb)
{
    std::cout << ctb[0]; // OK
    //ctb[0] = ‘A’; // Not OK – compiler error
}

int _tmain(int argc, _TCHAR* argv[])
{
    TextBlock tb(“Hello”);
    std::cout << tb[0];
    tb[0] = ‘x’; // OK because return has &, not const
    const TextBlock ctb("World");
    std::cout << ctb[0];
    return 0;
}

我得到這些編譯錯誤:

1>c:\users\lalancelot\documents\visual studio 2010\projects\item3\item3.cpp(31): error C2065: '“Hello”' : undeclared identifier
1>c:\users\lalancelot\documents\visual studio 2010\projects\item3\item3.cpp(33): error C2065: '‘x’' : undeclared identifier
1>c:\users\lalancelot\documents\visual studio 2010\projects\item3\item3.cpp(34): error C2664: 'TextBlock::TextBlock(const TextBlock &)' : cannot convert parameter 1 from 'const char [6]' to 'const TextBlock &'
1>          Reason: cannot convert from 'const char [6]' to 'const TextBlock'
1>          No constructor could take the source type, or constructor overload resolution was ambiguous

首先我要說的是,我很沮喪已經陷入了本書的早期階段。 我在某種程度上找到了信息:
static_cast <const A>(* this)和static_cast <const A&>(* this)之間的區別
但不是像書中那樣的工作答案。 我想讓這本書的例子有用,這樣我就能理解它是如何工作的。 我已經被困在這一天很多天了,我必須承認我需要幫助。 我想知道我是否在這里錯過了一個基本概念,或者我是否已經超越了我的想法。 謝謝。

你用的是什么樣的報價? 我問,因為當我查看你的代碼時,我會看到不同的開始和結束引號,當我將它復制/粘貼到我的編輯器中時,它表明它們是Unicode開啟和關閉引號。 C ++程序中的所有標點都應該是純ASCII:雙引號(打開和關閉)的0x22,以及單引號的0x27。 這也是在程序編輯器中輸入文本時鍵盤上的相應字符應該給你的東西。 (不要使用文字處理程序輸入代碼。)

TextBlock類需要一個可以從文本構造的構造函數:

explicit TextBlock( const std::string& s ) : text( s )
{
}

也許這本書有一個網站,你可以查閱該書的更正。

暫無
暫無

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

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