缺少类型说明符 - 在C ++中假设为Int

时间:2011-03-25 19:37:55

标签: c++ types specifier

这些第二行是抛出这个错误,但我不确定原因。

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__

3 个答案:

答案 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;

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

对于“优雅”设计来说,只要将变量传递给每个函数以避免使用它们,这是非常值得的。事实上,如果你开始编码,我打赌你会开始看到导致你重新思考设计部分的模式,你会得到比你从全球得到的错误“优雅”更好,更优雅的东西。基于变量的设计。