Мне нужно получить доступ к общедоступному перечислению, принадлежащему другому классу, для упрощения, примерно так:
class obj
{
public:
enum Type
{
t1,
t2,
t3
};
Type type;
};
class otherObj
{
public:
void setType(obj* o);
};
void otherObj::setType(obj* o)
{
o->type = obj::Type::t1;
return;
}
Как мне это сделать, потому что линия
o->type = obj::Type::t1;
Выдает ошибку:
obj::Type is not a class or namespace.
3 ответа
obj::t1
obj::t2
obj::t3
Разве перечисления C ++ не прекрасны? Значения попадают в область над ними, даже если перечисление можно рассматривать как тип.
В C ++ 03 значения перечисления принадлежат охватывающей области. Следовательно, замена obj::Type::t1
на obj::t1
подойдет вам.
Это несколько нелогично и решается функцией enum class
в C ++ 11, которая помещает значения перечисления непосредственно в область действия перечисления. Таким образом, если вы используете enum class
в компиляторе, совместимом с C ++ 11, тогда вы сможете использовать obj::Type::t1
, как вы это делаете сейчас.
Вы либо просто используете
obj::t1;
Или укажите атрибут class
в объявлении enum
enum class Type {
t1,
t2,
t3
};
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .