XCode не может найти, что стандартный C++ включает файл

Операторы потока, такие как:

virtual ostream& operator<<(ostream& stream, const BaseMessage objectArg) = 0;

просто не могут быть функциями-членами, и поэтому не могут быть виртуальными функциями. Причина этого в том, что когда вы говорите что-то вроде:

a << b;

вы действительно говорите

a.operator<<( b );

В этом случае a является потоком, а не экземпляром вашего класса, поэтому оператор не может быть членом вашего класса. Обычно вы должны сделать это бесплатной (не-членской) функцией, которая обращается к вашему экземпляру класса через подходящие функции-члены.

5
задан CiNN 17 June 2009 в 16:28
поделиться

2 ответа

If you are using Objective-C++ (i.e. mixing Objective-C and C++ in one source file or importing a C++ header into an Objective-C file), then you should be using the .mm extension on your source code files. By default, Xcode will compile .mm files using the Objective-C++ compiler. .m files are compiled using the standard C compiler.

8
ответ дан 14 December 2019 в 04:45
поделиться

Лучший способ диагностировать это - перетащить строку «Compiling foo.mm» из окна результатов сборки в ответ на это сообщение. Это показывает нам, что ваш проект сообщает компилятору, с мучительной подробностью, и покажет, что именно не так.

0
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: