-2

解決策を探してみましたが、見つかりませんでした。

だから私はヘッダーファイルを持っています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 が必要です

4

1 に答える 1

1

;ファイルにbeforeexternが必要items.hです。コンパイルする必要がありますが、.h ファイルで items ベクトルを定義する必要はありません。

于 2012-07-23T14:07:26.513 に答える