【问题标题】:Missing Type Specifier - Int Assumed in C++缺少类型说明符 - C++ 中假定为 Int
【发布时间】:2011-03-25 19:37:55
【问题描述】:

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

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__

【问题讨论】:

  • 你确定它是这些行之一吗?它在这里构建和运行都很好(gcc -Wall)。
  • 您可能在上面的一行中缺少分号。
  • 据我所知,编译器假设我正在初始化一个数组?
  • @Eugan - 我没有错过分号。

标签: c++ types specifier


【解决方案1】:
weapons[3] = "Rusty dagger";

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

【讨论】:

  • 哦,好的。建议使用 initialise() 函数吗?我是 C++ 新手,仍然习惯于约定。
  • 严格来说这不是真的。只要它们是“初始化”,您就可以在顶层进行分配。 OPs 赋值不是初始化,只是直接的普通赋值。
  • @Pig Head:最好避免使用全局变量。
  • @Pig Head:您可以将向量初始化为定义的一部分,尽管它应该放在 .cpp 文件中,并且需要您首先初始化一个普通的 C 数组 const char *然后将指向数组元素的指针提供给vector 构造函数。不过,实际上,正如@ybungalobill 指出的那样,避免使用全局变量是最明智的做法。
  • @Pig:对不起,但唯一不切实际的地方是嵌入式系统。我怀疑这是你的情况。
【解决方案2】:
weapons[3] = "Rusty dagger";

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

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

【讨论】:

    【解决方案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;
    

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

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

    【讨论】:

    • 在没有全局变量的情况下,让所有东西都可以访问的东西的下一个实用方法是什么?一个“全球”类?
    • @Pig:想想你的程序的哪些部分需要这个数组并将它传递给他们。创建像 WeaponManager 这样负责武器的东西,并将其作为参数传递给需要处理武器的每个组件...
    • 我已经向所有主要函数传递了很多变量,但为什么这比简单的全局变量更好?
    • @Pig Head:将它作为参数传递给所有需要它的东西。严重地。正如我所说,如果您开始这样做,您可能会开始看到向您建议更好的设计但仍然不是基于全局变量的模式。您可以通过将其作为参数传递给某些构造函数来简化这一点,并让构造的类保存对它的引用,因此它对类的该实例有点“全局”。
    • @Pig Head:因为,到了测试的时候,你可以将任何你想要的东西传递给任何想要数据的东西。这使得在彼此隔离的情况下测试组件变得更加容易。这也使得编写测试变得更容易,以确保您的程序不依赖于一些微妙的功能,例如您在全局数组中有多少项目,或者总是在位置 3 找到“生锈的匕首”。
    猜你喜欢
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2022-12-04
    • 2017-03-28
    • 2014-06-10
    • 2013-10-26
    相关资源
    最近更新 更多