2017-05-16 28 views
-2

我有一個簡單的問題,我需要一個提示。如何使用堆棧推送方法而不是int數據類型的類

我有一個這樣的程序:

#include <iostream> 
#include <string> 
#include <stack> 

using namespace std; 

stack<int> stack1; 

int main() { 
    stack1.push(11); 
    cout << stack1.top() << endl; 
    system("Pause"); 
    return 0; 
} 

這是工作完美:

image

但我需要使用的int一類/結構來代替,這是不工作得很好。

#include <iostream> 
#include <string> 
#include <stack> 

using namespace std; 

struct player { 
    string name; 
    string surname; 
    int age; 
}; 

stack<player> stack1; 

int main() { 
    stack1.push("Zlatan","Ibrahimovic",11); //I do not know how to do it properly. 
    cout << stack1.top() << endl; 
    system("Pause"); 
    return 0; 
} 

錯誤在Visual Studio:

image

+1

歡迎堆棧溢出。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。始終將錯誤信息作爲文本逐字發送,而不是圖像。 –

+1

使用'stack1.push(player {「Zlatan」,「Ibrahimovic」,11})' –

+1

您需要[重載'operator <<'](http://stackoverflow.com/questions/476272/how-to-如果你想能夠像這樣輸出一個'struct',否則誰知道你打算如何打印這種類型? –

回答

2

您需要構建你player結構的實例之前,您就可以將其推入堆棧。

另外,operator<<不知道如何在默認情況下流式傳輸player結構,因此您需要重載operator<<以自行提供該功能。

如果您使用版本的C++之前,C++ 11,試試這個:如果您使用的是C++ 11或更高版本

#include <iostream> 
#include <string> 
#include <stack> 
#include <cstdlib> 

struct player 
{ 
    std::string name; 
    std::string surname; 
    int age; 

    player(const std::string &name, const std::string &surname, int age) 
     : name(name), surname(surname), age(age) 
    { 
    } 

    void print(std::ostream &out) const 
    { 
     out << "Name: " << name << " " << surname << ", Age: " << age; 
    } 
}; 

std::ostream& operator<<(std::ostream &out, const player &p) 
{ 
    p.print(out); 
    return out; 
} 

std::stack<player> stack1; 

int main() 
{ 
    stack1.push(player("Zlatan", "Ibrahimovic", 11)); 
    std::cout << stack1.top() << std::endl; 
    std::system("Pause"); 
    return 0; 
} 

Live Demo

,試試這個來代替:

#include <iostream> 
#include <string> 
#include <stack> 
#include <cstdlib> 

struct player 
{ 
    std::string name; 
    std::string surname; 
    int age; 

    void print(std::ostream &out) const 
    { 
     out << "Name: " << name << " " << surname << ", Age: " << age; 
    } 
}; 

std::ostream& operator<<(std::ostream &out, const player &p) 
{ 
    p.print(out); 
    return out; 
} 

std::stack<player> stack1; 

int main() 
{ 
    stack1.push(player{"Zlatan", "Ibrahimovic", 11}); 
    std::cout << stack1.top() << std::endl; 
    std::system("Pause"); 
    return 0; 
} 

Live Demo

或者:

#include <iostream> 
#include <string> 
#include <stack> 
#include <cstdlib> 

struct player 
{ 
    std::string name; 
    std::string surname; 
    int age; 

    player(const std::string &name, const std::string &surname, int age) 
     : name(name), surname(surname), age(age) 
    { 
    } 

    void print(std::ostream &out) const 
    { 
     out << "Name: " << name << " " << surname << ", Age: " << age; 
    } 
}; 

std::ostream& operator<<(std::ostream &out, const player &p) 
{ 
    p.print(out); 
    return out; 
} 

std::stack<player> stack1; 

int main() 
{ 
    stack1.emplace("Zlatan", "Ibrahimovic", 11); 
    std::cout << stack1.top() << std::endl; 
    std::system("Pause"); 
    return 0; 
} 

Live Demo

+0

謝謝。我開始分析代碼。你真了不起! –

相關問題