Я получаю ошибку компиляции structure required on left side of . or .*
на chest.contents[0]
, но chest
это структура:
class Item {
public:
int id;
int dmg;
};
class Chest {
public:
Item contents[10];
};
int main()
{
Chest chest();
Item item = chest.contents[0];
return 0;
}
Нет, это не функция, которая принимает нулевые параметры.
Для инициализации переменной по умолчанию используйте
Chest chest;
В C ++ 11 этот синтаксис может использоваться для инициализации значения.
Chest chest{};
В C ++ 03 это требует сложного (из-за множества ошибок компилятора) обходного пути, который, к счастью, библиотека Boost сделала простой в использовании:
boost::value_initialized<Chest> chest;
Chest chest();
Это не так, как вы могли бы поверить, вызов конструктора
Chest::Chest();
Но скорее объявление функции. Правильный способ создать свой chest
является
Chest chest;
Только когда вы определили конструкторы, которые принимают аргументы, вы должны использовать круглые скобки.
string s;
string s2("Hello");