структура ожидается на левой стороне. или. * но это структура

Я получаю ошибку компиляции 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;
}

3

Решение

Нет, это не функция, которая принимает нулевые параметры.

Для инициализации переменной по умолчанию используйте

Chest chest;

В C ++ 11 этот синтаксис может использоваться для инициализации значения.

Chest chest{};

В C ++ 03 это требует сложного (из-за множества ошибок компилятора) обходного пути, который, к счастью, библиотека Boost сделала простой в использовании:

boost::value_initialized<Chest> chest;
12

Другие решения

Chest chest();

Это не так, как вы могли бы поверить, вызов конструктора

Chest::Chest();

Но скорее объявление функции. Правильный способ создать свой chest является

Chest chest;

Только когда вы определили конструкторы, которые принимают аргументы, вы должны использовать круглые скобки.

string s;
string s2("Hello");
6

По вопросам рекламы [email protected]