3

これらの2行目はこのエラーをスローしていますが、理由はわかりません。

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

初期化関数を呼び出すことは問題を処理する 1 つの方法ですが、別の方法が適切であると考えました。.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 に答える