Почему мой код нужен <iostream>?

Я написал некоторый базовый код, который я узнал, который можно использовать для определения типа, который получает перечисляемое значение в качестве аргумента конструктора и имеет функцию-член AsString() , которая возвращает значение в виде строки.

The code doesn't compile unless I include . It displays a warning in main saying that the type color has not been declared. Why is it required to include an input/output header file in my code while no input/output functions or operators are used in it?

enum ColorEnum {blue, red};

class color
{
    protected:
        ColorEnum value;
    public:
        color(ColorEnum initvalue)
        {
            value = initvalue;
        }
        std::string AsString()
        {
            switch (value)
            {
                case blue:
                    return "blue";
                case red:
                    return "red";
                default:
                    return "N/A";
            }
        }
};

int main()
{
    color mycolor = blue;
    return 0;
}
0
nl ja de
@Beachwalker В мире C ++ также характерно использование большого количества других конвенций. Не позволяйте себе обманывать ваш пузырь опыта.
добавлено автор R. Martinho Fernandes, источник
Это ВСЕ ваш код, или вы что-то убрали? У вас должен быть, по крайней мере, параметр include для ?
добавлено автор Mats Petersson, источник
Соглашения @Beachwalker Naming заключаются в personnal . Единственное, что имеет значение, это то, что все в вашей команде следуют тому же соглашению.
добавлено автор Etienne de Martel, источник
@ R.MartinhoFernandes ... была только рекомендацией. Посмотрите, как это сделали «большинство» людей/книг. В любом случае, вы также можете назвать свой класс cOlOr, но это не повышает читаемость. Я бы предпочел код, который легко читается и следует за конвенцией, которую используют и другие программисты. Я не знаю, что твой пузырь - я могу говорить только за меня. ( google-styleguide.googlecode.com/svn/trunk/cppguide.xml # Nam & zwnj; ing , возможность.com/Cpp/CppCodingStandard.html)
добавлено автор Beachwalker, источник
Кстати: я бы рекомендовал начать цвет названия класса с прописной буквы C => Цвет. Также в мире C ++ типично использовать имена нижних регистров (за исключением некоторых API-интерфейсов Microsoft), AsString() будет называться asString() большинством разработчиков (это для C ++, другие языки имеют другие соглашения) или реализовать операторы вместо явный метод преобразования.
добавлено автор Beachwalker, источник
Что вы также #include (укажите полный пример, пожалуйста), например. строка отсутствует (где <строка>)
добавлено автор Beachwalker, источник
Почему лучше начать с заглавной буквы? Я слышал это много раз, но я не вижу в этом логики.
добавлено автор Mohammad Sanei, источник
Нет, это все.
добавлено автор Mohammad Sanei, источник

2 ответы

You do not need , you need for std::string, which you may be getting indirectly via .

7
добавлено
во-вторых, нет. Миллисекунды, может быть :)
добавлено автор Luchian Grigore, источник
18 сек назад Лучиан Григоре, ответил 18 сек. назад juanchopanza lol :)
добавлено автор Luchian Grigore, источник
И я написал по существу то же самое в комментарии :(
добавлено автор Mats Petersson, источник
Независимо от того, какой заголовок вы включили, вам всегда нужно ввести std :: . iostream необходимо определить std :: string для работы, период. Тем не менее, это не нужно делать, введя заголовок string напрямую. В MSVC std :: string определяется в заголовке xstring , который содержит заголовок string и iostream , (Ваши имена заголовков будут отличаться, поскольку вы используете кодовые блоки)
добавлено автор Mooing Duck, источник
@MohammadSanei: iostream MSVC содержит заголовок, который имеет std :: string , определенный в нем, но фактически не включает заголовок string . Многие считают это плохим решением со стороны Microsoft.
добавлено автор Mooing Duck, источник
@LuchianGrigore же ответ тоже. Но я думаю, что ты избил меня на долю секунды.
добавлено автор juanchopanza, источник
@MohammadSanei больше на , используя пространство имен std .
добавлено автор juanchopanza, источник
@MohammadSanei Вам нужно #include , но вы не должны использовать пространство имен std . Просто назовите его std :: string .
добавлено автор juanchopanza, источник
@MohammadSanei не указывается, чтобы включить , и это не в компиляторах, которые я использую в эти дни. Но у меня есть старые воспоминания о , включая строки на компиляторе много лет назад ... Попробуйте включить и посмотрите, исправляет ли он проблему.
добавлено автор juanchopanza, источник
Включает ли ? Если да, я думаю, это была моя проблема, потому что я думал, что предназначен только для потоковой передачи/вывода.
добавлено автор Mohammad Sanei, источник
Это помогло решить проблему. Вы имеете в виду, что в новых компиляторах я должен включать как , так и с использованием пространства имен std , чтобы иметь возможность объявлять строковую переменную?
добавлено автор Mohammad Sanei, источник
Благодарю. Я думаю, что мой содержит файл . Но это странно. Я не вижу строку #include , когда я просматриваю свой .
добавлено автор Mohammad Sanei, источник
@MooingDuck Это не тот случай с моим компилятором, который является CodeBlocks, потому что мне всегда нужно добавлять std :: к моим типам строк, включаю ли я или < iostream> . Мой , кажется, включает , а не определяет std :: string . Но я не вижу инструкции включения в любом месте в файле или его включенных файлах.
добавлено автор Mohammad Sanei, источник

You don't need to include , but , because you use std::string, so that might set the compiler off.

If you include and still get the error, that sounds like a bug in the compiler.

5
добавлено
Хорошо, нам понадобится клетка, чтобы определить, какой ответ победит.
добавлено автор Mike DeSimone, источник
Более конкретно, также должна появиться другая ошибка, связанная с отсутствием определения для std :: string - или, скорее всего, компилятор будет жаловаться на «неполный тип» вместо «неопределенного типа» "
добавлено автор Magnus, источник
Спасибо за ваш ответ, Лучиан.
добавлено автор Mohammad Sanei, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest