首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生效c++项目3示例

生效c++项目3示例
EN

Stack Overflow用户
提问于 2012-09-11 02:02:34
回答 2查看 687关注 0票数 2

我的问题是关于"Effective C++“这本书的第(3)项。这本书给出了这个例子,我试图尽可能地将其复制到VS2010 c++中(包括iostream和string):

代码语言:javascript
复制
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;
}

我得到了这些编译错误:

代码语言:javascript
复制
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

首先,我要说的是,我很沮丧,因为我已经被困在这本书的早期阶段。不知何故,我在这里找到了信息:

difference between static_cast(*this) and static_cast(*this)

但不是像书中那样有效的答案。我想让这本书的例子工作,这样我就可以理解它是如何工作的。我已经在这个问题上困了很多天了,我必须承认我需要帮助。我想知道我是否在这里遗漏了一个基本的概念,或者我是否远远超出了我的理解。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-09-11 02:15:48

您使用的是哪种类型的引语?我之所以这样问,是因为当我查看您的代码时,我看到不同的开始和结束引号,当我将其复制/粘贴到我的编辑器中时,它表明它们是Unicode开始和结束引号。 C++程序中的所有标点符号都应该是纯ASCII码: 0x22表示双引号(包括左引号和右引号),0x27表示单引号。这也是在程序编辑器中输入文本时,键盘上相应的字符应该提供的功能。(请勿使用文字处理器输入代码。)

票数 6
EN

Stack Overflow用户

发布于 2012-09-11 02:06:08

类TextBlock需要一个构造函数才能从文本中构造:

代码语言:javascript
复制
explicit TextBlock( const std::string& s ) : text( s )
{
}

也许这本书有一个网站,你可以在那里找到对这本书的更正。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12357098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档