2012-11-22 17 views
0

嘿,我被建議在私有(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; 
} 
+3

'Inventory.h'需要包含'#include ',並且在頭文件中使用namespace std;'是一種不好的做法。 –

+1

很多人在這裏說'使用namespace std;'是壞習慣,但不是說爲什麼。您可能想閱讀[this](http://www.parashift.com/c++-faq/using-namespace-std.html)或[this](http://stackoverflow.com/questions/1452721/why -is-使用名稱空間-STD-認爲-A-壞實踐中-C)。 – BoBTFish

+0

@BoBTFish非常感謝。 – Pendo826

回答

3

您需要包括<vector>Inventory.h文件中提供的命名空間。

這與錯誤無關,但您也應該避免將using namespace std放在頭文件中。 using namespace否定了命名空間的優點,並且通過將其放入標題中,可以在包含標題的任何代碼上強制執行它。這可能會以神祕的方式破壞代碼。就個人而言,我不會在任何地方使用using namespace std。無序的潛力遠遠超過(相當適度)的好處。

+0

非常感謝。對我來說這是一個不好的常識。感謝您幫助我。 – Pendo826

2

喲ü需要#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; 
} 
+0

缺少'std :: string add'。 – BoBTFish

+0

是的,好拿起,更新 – billz

1

爲了使長短期的事情:

#include <vector> 

到您的.h文件中,一切都應該正常工作。

1

您需要包括

#include <vector> 
在你的頭文件

。在頭文件中做using namespace std也是不好的做法。

相關問題