为什么我认为我的类数组是默认的int数组?

时间:2011-10-26 20:14:02

标签: c++-cli

我是编程的新手,我正在尝试创建一个类对象数组,然后单独初始化每个组件。我设法轻松地声明我的类数组:

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 个答案:

答案 0 :(得分:3)

我不知道编译器错误说的是什么(你应该把它添加到问题中),但这是错误的:

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

races[0]RACE类型的对象,而不是指针,这意味着更新name您不使用->,而是. }:

races[0].name = "anything";

答案 1 :(得分:1)

在咨询了我的水晶球之后,我将疯狂地猜测一下这些错误:

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";

在命名空间级别,在任何函数之外。该语言不允许您在命名空间级别添加代码,并且编译器感到困惑。它试图将其与有效的模式进行匹配,并且正在考虑races[0]隐式类型的0元素数组(错误1)的声明/ em> int(C允许在声明中跳过类型说明符,默认为int - 错误3)。如果这是一个声明,它必须后跟;,,但编译器正在读.,因此它认为属于下一个表达式,并且应该在它之前是;(错误2)。最后,整个声明将变量races重新定义为0 int的数组,而第一个定义使其成为16 RACE的数组(错误4)。

答案 2 :(得分:0)

对于名为RACE的类,将使用RACE races[16]访问races[0].name = "anything"数组。

答案 3 :(得分:0)

编译器说它不知道什么是RACE。可能你忘了在它声明的地方包含标题。

编辑:

这样的事情:

#include "race.h"

RACE races[16];

答案 4 :(得分:0)

从问题中不清楚,但我认为它是假设int,因为类的定义因为先前需要先修复的错误而失败。