3

这些第二行引发了这个错误,但我不知道为什么。

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

--

这是我的整个文件:

//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__
4

3 回答 3

12
weapons[3] = "Rusty dagger";

这是一个声明。您不能在全局范围内编写语句。你必须把它放在一个函数中。

于 2011-03-25T19:43:05.063 回答
3
weapons[3] = "Rusty dagger";

是一个声明。它不能出现在函数之外。

相反,您可以将它放在 的开头附近,或者放在程序早期调用main()的某个函数中。init_weapons()

于 2011-03-25T19:44:17.847 回答
3

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

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

::std::vector< ::std::string> names(init_ary, init_ary+3);

然后你会在你的.h文件中有这个声明:

extern ::std::vector< ::std::string> names;

但实际上,避免全局变量是最好的主意。由于多种原因,它们是严重的坏消息,其中一些原因并不明显。例如,它们使您的代码更难测试。

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

于 2011-03-25T19:54:32.823 回答