Эффективный пример c ++ item 3

Мой вопрос о конкретном пункте (3) книги «Эффективный C ++». В книге приведен пример, который я попытался воспроизвести как можно ближе к версии 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>(* это) и static_cast<const A&>(*этот),
но не рабочий ответ, как тот, что в книге. Я хотел бы, чтобы пример книги работал, чтобы я мог понять, как он работает. Я застрял на этом в течение многих дней, и я должен признать, что мне нужна помощь. Я хотел бы знать, пропускаю ли я базовую концепцию здесь или я над головой. Благодарю.

2

Решение

Какие цитаты вы используете? Я спрашиваю, потому что, когда я смотрю на ваш
код, я вижу различные открывающие и закрывающие кавычки, и когда я копирую / вставляю
это в мой редактор, это означает, что они открывают Unicode и
закрывающие кавычки. Все пунктуация в программе на C ++ должна быть чистой
ASCII: 0x22 для двойных кавычек (как открывающих, так и закрывающих) и 0x27
для одинарных кавычек. Это также то, что соответствующие символы
на клавиатуре должен выдавать при вводе текста в программе
редактор
. (Не используйте текстовый процессор для ввода кода.)

6

Другие решения

Класс TextBlock нуждается в конструкторе, который можно создать из текста:

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

Может быть, есть веб-сайт для книги, где вы можете найти исправления к книге.

2

По вопросам рекламы [email protected]