Привет, я пытаюсь сделать что-то вроде следующего.
Если некоторые переменные переданы из строки cmd, т.е.
const char * outputtype1
const char * outputtype2
Последний может быть NULL.
Затем я хочу создать экземпляр класса, если outputtype2 задан в командной строке. Как я могу добавить экземпляр этого класса. то есть.
if(outputtype2)
{
cats thomas(outputtype2);
}
Затем я использую это позже, как
thomas.eatfood(whiskers);
Это то, где он расстраивается. Очевидно, что thomas не существует, если outputtype2 является нулевым, но почему я не могу это сделать?
if (outputtype2)
{
cats thomas(outputtype2);
}
без ошибок "thomas" не был объявлен в этой области. Я боюсь, что здесь отсутствует основное правило.
Если я понимаю ваш вопрос, проблема в том, что вы создаете экземпляр класса в области if. Позже вы пытаетесь вызвать метод eatfood объекта thomas, но объект не существует в текущей области.
Может быть, вы хотите это сделать...
if (outputtype2) {
cats thomas(outputtype1);
thomas.eatfood(whiskers);
}
Или используйте указатель...
Cats* thomas = NULL;
if (outputtype2) {
thomas = new Cats(outputtype1);
}
if (thomas != NULL) {
thomas->eatfood(whiskers);
}
Вероятно, вам понадобится boost::optional<cats>
. Это позволяет вам определить thomas
спереди и назначить cats(outputtype2)
на thomas тогда и только тогда, когда они доступны.
Следствием этого является то, что при любом использовании thomas
вам нужно будет проверить, на самом деле он был назначен.
То, что вы пропустили, - это концепция переменной видимости и видимости. Когда вы пишете:
if(outputtype2)
{
cats thomas(outputtype2);
}
это означает, что переменная thomas
существует только в блоке, в котором она объявлена. Вне нее thomas больше не существует, и объект, и ссылка уничтожаются, когда элемент управления покидает блок. Поэтому вы не можете использовать их снаружи!
Найдите другую логику для написания вашей программы.
cats thomas
внеif
объема.