Отсутствует спецификатор типа - Int предполагается в C ++ - PullRequest
3 голосов
/ 25 марта 2011

Эта вторая строка выдает эту ошибку, но я не уверен, почему.

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 ]

12 голосов
/ 25 марта 2011
weapons[3] = "Rusty dagger";

Это утверждение. Вы не можете писать заявления в глобальной области видимости. Вы должны поместить его в функцию.

3 голосов
/ 25 марта 2011

Хотя вызов функции инициализации является одним из способов решения вашей проблемы, я подумал, что альтернатива может быть в порядке. Вот что вы можете сделать где-нибудь в файле .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;

Но на самом деле лучше избегать глобальных переменных. Это серьезно плохие новости по целому ряду причин, некоторые не сразу очевидны. Например, они затрудняют тестирование вашего кода.

Это стоит того, чтобы казаться хитом «элегантного» дизайна, чтобы просто передать переменную каждой функции, чтобы избежать их. На самом деле, если вы начнете кодировать это, я уверен, что вы начнете видеть шаблоны, которые заставят вас переосмыслить части вашего дизайна, и в итоге вы получите нечто более приятное и более элегантное, чем ложная «элегантность», которую вы получаете от глобальных переменный дизайн.

3 голосов
/ 25 марта 2011
weapons[3] = "Rusty dagger";

это утверждение. Он не может появляться вне функции.

Вместо этого вы можете поместить его в начале main(), или в какую-нибудь init_weapons() функцию, которая вызывается на ранней стадии вашей программы.

...