2016-07-29 368 views
-1
#include <string> 

struct Person 
{ 
    Person(std::string name) { 
    } 

    std::string greet(std::string other_name) 
    { 
    name="Joe"; 
    return "Hi " + other_name + ", my name is " + name; 
    } 

    std::string name; 
}; 

使用greet函數,我想要返回一個名稱(例如John),但是,函數在寫入時不返回任何內容。在「我的名字是」字符串後是空白的。這個問候函數爲什麼不返回接受的值?

如何在結構中正確指定名稱的值,以便我可以得到正確的返回?

非常感謝您向正確的方向推動!

+4

它不是很清楚'正確'的返回值是什麼。它應該是'你好X我的名字是喬'或別的什麼?在猜測我會說你想傳遞給構造函數的值被使用?如果您包含一個顯示如何使用「Person」的小型主函數,它可能會使您的意圖更清晰。 –

+1

你使用什麼編譯器?對我而言,您的代碼按預期工作。 – nshct

+0

發佈演示問題的完整程序(即調用函數的主程序)! – Hurkyl

回答

-1

嘗試使用斷點?

我跑採用G ++使用MinGW的代碼,並得到了相同的結果,然後將其更改爲此

#include <iostream> 
#include <string> 

using std::string; 

struct Person 
{ 
    string name; 
    Person(string _name) { 
     name = _name; 
    } 

    string greet(string other_name) 
    { 
    return "Hi " + other_name + ", my name is " + name; 
    } 

}; 

int main() 
{ 
    Person person("foo"); 
    std::cout << person.greet("bar"); 
    return 0; 
} 

問題是,名稱爲null,但是編譯器不給任何警告 這個輸出「你好吧,我的名字是富」,我編譯自己,得到正確的結果

+3

快速更正:'name'不爲空。它是默認初始化的,對於std :: string表示一個空字符串。還有一點改進:在輸入構造函數體之前,Person(string _name):name(_name){}'用'std :: string'構造函數初始化'name'。在構造函數的主體中使用'name = _name','name'可以首先被默認構造然後分配,基本上做兩個工作而不是一個。 – user4581301

+0

哇,斷點......好吧,這似乎是我試圖解決這個問題的問題。有人能推薦一些新手資源來確保我理解這些「小事情」嗎? – anichols

+0

好吧,你回答了你自己的問題,一步一步通過它:) 斷點我使用gdb ,而不是專注於小事情,確保你首先了解基礎知識 – hec

-1
#include <string> 

struct Person 
{ 
    Person(std::string _name) { 
    name = _name;} 

    std::string greet(std::string other_name) 
    { 

    return "Hi " + other_name + ", my name is " + name; 
    } 

    std::string name; 
}; 
+1

添加一些評論給你的答案 – kvorobiev

0

它不是從構造函數中的參數初始化名稱字段。即將構造函數更改爲:

#include <string> 

    struct Person 
    { 
     Person(std::string name) : name(name) {} { 
    } 

    std::string greet(std::string other_name) 
    { 
     return "Hi " + other_name + ", my name is " + name; 
    } 

    std::string name; 
    }; 

這應該解決您的問題並將返回所需的解決方案。

相關問題