我是编程的新手,我正在尝试创建一个类对象数组,然后单独初始化每个组件。我设法轻松地声明我的类数组:
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'
的声明
这仍然会产生错误。
答案 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,因为类的定义因为先前需要先修复的错误而失败。