解決策を探してみましたが、見つかりませんでした。
だから私はヘッダーファイルを持っていますitems.h
:
#ifndef ITEMS_H
#define ITEMS_H
#include <vector>
using std::vector;
int create_item();
class itemClass
{
public:
short int xTile;
short int yTile;
bool playerHas;
short int category;
short int weaponCategory;
}extern vector<itemClass> items;
#endif
そして、items.cpp
このベクトルを使用しようとする場所がありますcreate_item()
:
#include "stdafx.h"
#include "SDL.h"
#include "items.h"
#include <vector>
using namespace std;
vector<itemClass> items;
int index = 0;
int create_item()
{
//select category for the created item
short int itemCategory = rand() % 3;
switch(itemCategory)
{
case WEAPON:
//increase weapons list by one
items.resize(items.size() + 1);
index = items.size();
//set appropriate item category
items.at(index).category = itemCategory;
items.at(index).weaponCategory = rand() % 9;
break;
}
重要でない部分をいくつか省略しました。とにかく、ヘッダーでベクターを extern として宣言しない限り、このコードは正常に機能しますが、ローカルに保持するだけです。これを実行しようとするとエラーが発生するのはなぜですか?
編集:申し訳ありませんが、エラーを含めるのを忘れていました:
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(12): エラー C2371: 'アイテム': 再定義; さまざまな基本タイプ
1>
c:\users\aske\documents\c++\roguelike\roguelike\items.h(53) : 「items」の宣言を参照1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(36): エラー C2228: '.resize' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(36): エラー C2228: '.size' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(38): エラー C2228: '.size' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(41): エラー C2228: '.at' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(41): エラー C2228: '.category' の左側には class/struct/union が必要です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(43): エラー C2228: '.at' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(43): エラー C2228: '.weaponCategory' の左側には class/struct/union が必要です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(46): エラー C2228: '.at' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(46): エラー C2228: '.weaponCategory' の左側には class/struct/union が必要です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(47): エラー C2228: '.at' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(47): エラー C2228: '.weaponCategory' の左側には class/struct/union が必要です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(48): エラー C2228: '.at' の左側には class/struct/union が必要です
1> タイプは 'int' です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(48): エラー C2228: '.weaponCategory' の左側には class/struct/union が必要です
1>c:\users\aske\documents\c++\roguelike\roguelike\items.cpp(50): エラー C2228: '.at' の左側には class/struct/union が必要です