ошибка при попытке объявить вектор приватно в заголовочном файле

Привет, мне посоветовали объявить мой вектор закрытым (Iventory.h) вместо того, чтобы использовать глобально в .cpp (Inventory.cpp), что я и сделал. Но сейчас есть много ошибок, выплевывающих на меня.

Вот ошибки:

Error   1   error C2143: syntax error : missing ';' before '<'  c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   22  1   MaroonedCA2
Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   22  1   MaroonedCA2
Error   3   error C2238: unexpected token(s) preceding ';'  c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   22  1   MaroonedCA2
Error   4   error C2143: syntax error : missing ';' before '<'  c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   23  1   MaroonedCA2
Error   5   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   23  1   MaroonedCA2
Error   6   error C2238: unexpected token(s) preceding ';'  c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   23  1   MaroonedCA2
Error   7   error C2143: syntax error : missing ';' before '<'  c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   24  1   MaroonedCA2
Error   8   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   24  1   MaroonedCA2
Error   9   error C2039: 'const_iterator' : is not a member of '`global namespace'' c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   24  1   MaroonedCA2
Error   10  error C2238: unexpected token(s) preceding ';'  c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.h   24  1   MaroonedCA2
Error   11  error C2065: 'inventory' : undeclared identifier    c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.cpp 18  1   MaroonedCA2
Error   12  error C2228: left of '.push_back' must have class/struct/union  c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.cpp 18  1   MaroonedCA2
Error   13  error C2065: 'inventory' : undeclared identifier    c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.cpp 39  1   MaroonedCA2
Error   14  error C2228: left of '.size' must have class/struct/union   c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.cpp 39  1   MaroonedCA2
Error   15  error C2065: 'inventory' : undeclared identifier    c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.cpp 42  1   MaroonedCA2
Error   16  error C2228: left of '.size' must have class/struct/union   c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.cpp 42  1   MaroonedCA2
Error   17  error C2065: 'inventory' : undeclared identifier    c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\maroonedca2\maroonedca2\inventory.cpp 43  1   MaroonedCA2

Inventory.h

#ifndef INVENTORY_H
#define INVENTORY_H
#include <string>

using namespace std;
class Inventory
{
public:
//Constructor
Inventory();

//Methods.
string add(string item);
void displayInventory();
void showInventory();
private:
//Data members
vector<string> inventory;
vector<string>::iterator myIterator;
vector<string>::const_iterator iter;
};#endif //INVENTORY_H

Inventory.cpp

#include "Inventory.h"#include <iostream>
#include <vector>   //  To enable the use of the vector class.
#include <string>using namespace std;Inventory::Inventory()
{

}

string Inventory :: add(string item)
{
inventory.push_back(item);
return item;
}

void Inventory:: showInventory()
{
char input[80];
cin >> input;
char inventoryRequest[] = "i";
int invent = strcmp (input,inventoryRequest);
//compare the player input to inventoryRequest (i) to see if they want to look at inventory.
if(invent == 0)
{
displayInventory();
}}
void Inventory:: displayInventory()
{
//vector<string> inventory;
cout<< "You have " << inventory.size() << " items.\n";
cout << "\n******Inventory******";
cout<< "\nYour items:\n";
for (int i= 0; i< inventory.size(); ++i)
cout<< inventory[i] << endl;
}

0

Решение

Вы должны включить <vector> в вашем Inventory.h файл.

Это не связано с ошибкой, но вы также должны избегать using namespace std в заголовочных файлах. using namespace сводит на нет преимущества наличия пространств имен, и, помещая его в заголовок, вы навязываете его любому коду, содержащему ваш заголовок. Это может сломать код таинственными способами. Лично я бы не использовал using namespace std в любом месте. Потенциал для беспорядка намного перевешивает (довольно скромные) выгоды.

3

Другие решения

вам нужно #include <vector> в заголовочном файле

#ifndef INVENTORY_H
#define INVENTORY_H
#include <string>
#include <vector>

//using namespace std;   <-- get rid of this line
//it's bad idea to include all std stuff into your code
class Inventory
{
public:
//Constructor
Inventory();

//Methods.
std::string add(std::string item);
void displayInventory();
void showInventory();
private:
//Data members
std::vector<std::string> inventory;
//^^^  use full namespace qualified variables
std::vector<std::string>::iterator myIterator;
std::vector<std::string>::const_iterator iter;
};#endif //INVENTORY_H

в Inventory.cpp также предоставьте пространство имен для строки

std::string Inventory :: add(std::string item)
{
inventory.push_back(item);
return item;
}
2

Чтобы сделать длинные вещи короткими:

Написать

#include <vector>

в ваш файл .h и все должно работать нормально.

1

Вы должны включить

#include <vector>

в вашем заголовочном файле. Также делаю using namespace std в заголовочных файлах это плохая практика.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector