Почему он считает, что мои массивы классов являются массивами int по умолчанию? - PullRequest
0 голосов
/ 27 октября 2011

Я новичок в программировании и пытаюсь создать массив объектов классов, а затем инициализировать каждый компонент по отдельности. Мне удается легко объявить мой массив классов:

Classsystem.h

class RACE {

public:

    string name;
    string shortdescription;
    string description;
    int noobjects;
    bool objects[N];
    int agressiveness;
    bool hulls[nohulls];
    bool shields[noshields];
    bool weapons[noweapons];
    bool companies[nocompanies];
    double tax;
    double bank;
    double currency;
    int diplomacy[noraces];
    double population;

public:

    ~RACE(){}
    RACE() {
        name="Default Race";
        shortdescription="Default";
        description="Default";
        noobjects=0;
        for(int i=0; i<N;i++) { objects[i]=0; }
        agressiveness=0;
        for (int i=0; i<nohulls;i++) { hulls[i]=0 ; }
        for (int i=0; i<noshields;i++) { shields[i]=0; }
        for(int i=0; i<noweapons;i++) { weapons[i]=0; }
        for(int i=0; i<nocompanies;i++) { companies[i]=0; }
        tax=0;
        bank=0;
        currency=1;
    }

    RACE(string iname, int inoobjects, int iagressiveness, double itax, double ibank, double icurrency) {
        name=iname;
        noobjects=inoobjects;
        agressiveness=iagressiveness;
        tax=itax;
        bank=ibank;
        currency=icurrency;
        for(int i=0; i<N;i++) { objects[i]=0; } 
        for(int i=0; i<nohulls;i++) { hulls[i]=1; } 
        for(int i=0; i<noshields;i++) { shields[i]=1; }
        for(int i=0; i<noweapons;i++) { weapons[i]=1; } 
        for(int i=0; i<nocompanies;i++) { companies[i]=0; }
    }
};

races.h:

 races[0].name="anything";

main.ccp:

#include "stdafx.h"
#include "Classsystem.h"

RACE races[16];

#include "races.h"

int main(array<System::String ^> ^args)
{
return 0;
}

ошибка гласит:

races.h (1): ошибка C2466: невозможно выделить массив постоянного размера 0
races.h (1): ошибка C2143: синтаксическая ошибка: отсутствует ';' до '.'
races.h (1): ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int
races.h (1): ошибка C2371: 'races': переопределение; различные основные типы
control console.cpp (13): см. объявление 'races'

все равно выдает ошибку.

Ответы [ 5 ]

3 голосов
/ 27 октября 2011

Я не знаю, что говорит ошибка компилятора (вы должны добавить это к вопросу), но это неправильно:

races[0]->name="anything";

races[0] - это объект типа RACE, а неуказатель, который означает, что для обновления name вы используете не ->, а .:

races[0].name = "anything";
1 голос
/ 27 октября 2011

После консультации с моим хрустальным шаром я пойду на дикую догадку, чтобы объяснить ошибки:

1. error C2466: cannot allocate an array of constant size 0
2. error C2143: syntax error : missing ';' before '.'
3. error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
4. error C2371: 'races' : redefinition; different basic types
\control console.cpp(13) : see declaration of 'races'

И предположение таково:

races[0].name = "anything";

вуровень пространства имен, вне какой-либо функции.Язык не позволяет вам добавлять код на уровне пространства имен, и компилятор запутывается.Он пытается сопоставить это с шаблонами для valid и считает, что races[0] является объявлением массива 0 элементов (ошибка 1) неявного типа int(C допускает, что спецификатор типа будет пропущен в объявлении, и по умолчанию будет int там - ошибка 3).Если это объявление, за ним должно следовать либо ;, либо ,, но компилятор читает ., поэтому считает, что оно должно принадлежать следующему выражению, и что до него должно быть ;это (ошибка 2).Наконец, все объявление переопределяет переменную races как массив 0 int, в то время как первое определение делает ее массивом 16 RACE (ошибка 4).

0 голосов
/ 27 октября 2011

Это не ясно из вопроса, но я думаю, что это предполагает int, потому что определение класса не удалось из-за предыдущих ошибок, которые вам нужно будет исправить в первую очередь.

0 голосов
/ 27 октября 2011

Компилятор говорит, что не знает, что такое RACE. Возможно, вы забыли включить заголовок, где он объявлен.

EDIT:

Примерно так:

#include "race.h"

RACE races[16];
0 голосов
/ 27 октября 2011

Для класса с именем RACE массив RACE races[16] будет доступен с помощью races[0].name = "anything".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...