Ошибка C ++: класс имеет связь со Struct в том же заголовочном файле - PullRequest
0 голосов
/ 23 июня 2011

Я определяю файл заголовка C ++, и по какой-то причине создаваемый мной класс выдает ошибку, когда я пытаюсь сослаться на структуру, которая определена в том же файле, вместе с классом перечисления, который я создал.

Я довольно новичок в C ++, хотя у меня есть некоторый опыт работы с Java и C #.Даже тогда мой опыт программирования относительно низок.Я неправильно инициализирую ссылку?Должен ли я поместить структуру и перечисление в отдельный заголовочный файл?

#include <iostream>
#include <stdio.h>

class Character 
{
private:

    Stats stats; //<--error: "Type 'Stats' could not be resolved."

public:




};

struct Stats
{
    int strength;
    int intelligence;
    int endurance;
    int speed;
    int agility;
    int luck;
};

enum Race 
{
    NONE,
    HUMAN,
    ALIEN,
    ANDROID
};

Примечание: я использую Eclipse 3.7 (Indigo) для C ++, на случай, если это что-то значит.

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

C ++ анализируется сверху вниз по файлу;вам нужно переместить определение класса Stats выше определения класса Character.

1 голос
/ 23 июня 2011

В C ++ вы не можете использовать что-либо, если оно не было объявлено.

В вашем случае Stats должно быть не только объявлено, но и должно быть полностью определено.

Тем не менее, ВСЕ ВЕРХНИЕ ИДЕНТИФИКАТОРЫ обычно зарезервированы для макросов. Не используйте их для констант. Использование их для констант является агрессивной атакой на глаза любого читающего код, оно рискует непреднамеренно заменить текст и сокращает и без того небольшой набор вариантов для имен макросов. Это Java-изм. Он работает в Java, потому что у Java нет препроцессора (по иронии судьбы, Java получил соглашение от C, где его макросы использовались как «константы»).

Ура & hth

...