这些第二行是抛出这个错误,但我不确定原因。
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__
答案 0 :(得分:12)
weapons[3] = "Rusty dagger";
这是一个声明。您不能在全局范围内编写语句。你必须将它放在一个函数中。
答案 1 :(得分:3)
weapons[3] = "Rusty dagger";
是一份声明。它不能出现在函数之外。
相反,您可以将它放在main()
的开头附近,或者放在程序中早期调用的某个init_weapons()
函数中。
答案 2 :(得分: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;
但实际上,避免全局变量是最好的主意。由于一系列原因,它们是严重的坏消息,有些原因并不是很明显。例如,它们使您的代码更难以测试。
对于“优雅”设计来说,只要将变量传递给每个函数以避免使用它们,这是非常值得的。事实上,如果你开始编码,我打赌你会开始看到导致你重新思考设计部分的模式,你会得到比你从全球得到的错误“优雅”更好,更优雅的东西。基于变量的设计。