Мой вопрос касается конкретного пункта (3) книги "Эффективный C++". В книге приведен этот пример, который я попытался воспроизвести как можно ближе к C++ 2010 года (включая iostream и строку):
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;
}
And I get these compiling errors:
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),
, но не рабочий ответ, как в книге. Я хотел бы, чтобы пример книги работал, чтобы я мог понять, как он работает. Я застрял на этом уже много дней, и я должен признать, что мне нужна помощь. Я хотел бы знать, не хватает ли мне здесь базовой концепции или я не в себе. Спасибо.
"
, но, похоже, это не так. - person Joachim Isaksson   schedule 10.09.2012