C++ 缺少类型说明符-C+中假定的Int+;

C++ 缺少类型说明符-C+中假定的Int+;,c++,types,specifier,C++,Types,Specifier,第二行是抛出这个错误,但我不知道为什么 std::vector<std::string> weapons(100); weapons[3] = "Rusty dagger"; std::矢量武器(100); 武器[3]=“生锈的匕首”; -- 这是我的全部文件: //global variables #ifndef _GLOBAL_ #define _GLOBAL_ #include <vector> #include <iostream> #inclu

第二行是抛出这个错误,但我不知道为什么

std::vector<std::string> weapons(100);
weapons[3] = "Rusty dagger";
std::矢量武器(100);
武器[3]=“生锈的匕首”;
--

这是我的全部文件:

//global variables
#ifndef _GLOBAL_
#define _GLOBAL_

#include <vector>
#include <iostream>
#include <string>

//prototypes
void NPCTalk(std::string const& speaker,std::vector<std::string> const& text);
void wait(double seconds);
void regionChange(int amount);
int getPositionInStringVector(std::vector<std::string> const& vec,std::string value);

//variables
std::vector<std::string> weapons(100);
weapons[3] = "Rusty dagger";

//defines
#define RegionChange 3

#endif //__GLOBAL__
//全局变量
#ifndef全球_
#定义全局_
#包括
#包括
#包括
//原型
void NPCTalk(std::string常量和speaker,std::vector常量和text);
无效等待(双秒);
无效区域变更(整数金额);
int getPositionInStringVector(标准::向量常量和向量,标准::字符串值);
//变数
性病:病媒武器(100);
武器[3]=“生锈的匕首”;
//定义
#定义区域更改3
#endif/\uu全局__
这是一份声明。不能在全局范围内编写语句。必须将其放入函数中

weapons[3] = "Rusty dagger";
这是一份声明。它不能出现在函数之外

weapons[3] = "Rusty dagger";

相反,你可以把它放在
main()
的开头附近,或者放在一些
init\u-wearms()
函数中,这些函数在你的程序中很早就被调用了。

虽然调用初始化函数是解决问题的一种方法,但我认为另一种方法可能是合适的。以下是您可以在
.cpp
文件中某处执行的操作:

static const char * const init_ary[] = {
   "Fred",
   "Barney",
   "Joe"
};

::std::vector< ::std::string> names(init_ary, init_ary+3);
但实际上,避免全局变量是最好的主意。这是一个严重的坏消息,原因有很多,有些还不是很明显。例如,它们使您的代码更难测试


对于一个“优雅”的设计来说,将变量传递给每个函数以避免出现它们是非常值得的。事实上,如果你开始对其进行编码,我敢打赌你会看到一些模式,这些模式会让你重新思考设计的某些部分,最终你会得到比基于全局变量的设计更美好、更优雅的东西。

你确定这是其中的一条吗?它在这里构建并运行得很好(gcc-Wall)。您可能在上面的一行中缺少分号。根据我所能收集到的信息,编译器假设我正在初始化一个数组?@Eugan-我没有缺少分号。哦,好的。是否建议使用initialise()函数?我对C++很陌生,仍然习惯于惯例。这不是严格的。只要是“初始化”,您就可以在顶层完成作业。OPs赋值不是一个初始化,只是一个简单的普通赋值。@Pig-Head:最好避免全局变量。@Pig-Head:可以将向量作为定义的一部分进行初始化,不过应该放在
.cpp
文件中,它将要求您首先初始化一个普通的C数组
constchar*
,然后将指向数组元素的指针提供给
vector
构造函数。尽管如此,正如@ybungalobill所指出的,避免使用全局变量是最明智的做法。@Pig:对不起,唯一不可行的地方是在嵌入式系统中。我怀疑这是你的情况。没有全局变量,任何东西都可以访问的下一个实用方法是什么?“全局”类?@Pig:想想你的程序的哪些部分需要这个数组,并将它传递给他们。创建负责武器的
WeaponManager
之类的东西,并将其作为参数传递给需要处理武器的每个组件……我已经将许多变量传递给了我的所有主要函数,但为什么这比一个简单的全局变量更好?@Pig Head:将其作为参数传递给所有需要它的组件。认真地正如我所说的,如果你开始这样做,你可能会看到一些模式,它们向你建议了一个更好的设计,但仍然不是基于全局变量的。您可以通过将它作为参数传递给某些构造函数来简化它,并让构造的类保存对它的引用,这样它对该类的实例就有点“全局性”。@Pig Head:因为,当测试到来时,您可以传递任何您想要传递的信息,无论它想要数据是什么。这使得相互隔离地测试组件变得更加容易。这也使得编写测试更加容易,以确保您的程序不依赖于某些微妙的特性,例如您的全局数组中有多少项,或者“生锈的匕首”总是位于位置3。
extern ::std::vector< ::std::string> names;