2014-12-02 19 views
0

我需要在列表中的成員返回指針,如果所需的部件不在那裏,我得到一個空指針(或任何其他指示)如何爲列表成員C++返回空指針?

list<LINKS>::iterator find_link(list<LINKS> &link, char* ID) 
{ 
    list<LINKS>::iterator link_index; 
    LINKS link_i; 

    link_index = link.begin(); 
    for (int i = 0; i < link.size(), i++) 
    { 
     link_i = *link_index; 

     if (!strcmp(link_i.ID, ID)) { return link_index; }; 

     link_index++; 

    }; 
    cout << "Node outsession does not exist " << ID; 
    return nullptr; // ERROR (nullptr is not the same type as list<LINKS>::iterator) 
}; 

我添加了錯誤消息(cout << "Node outsession does not exist " << ID;)指示如果沒有找到鏈接,但我需要爲調用者函數指出該鏈接。

我該怎麼做? 感謝

+11

的規範方法返回一個「未找到」的迭代器將返回'link.end();'。 – user657267 2014-12-02 00:06:53

+0

但link.end()仍然是調用者函數的有效指針。調用者永遠不會注意到該鏈接不存在。 – Ammar 2014-12-02 00:11:13

+2

調用者會說'if(find_link(links,&ID)== links.end())// error' – Galik 2014-12-02 00:12:31

回答

2

nullptr不是一個迭代器,所以你不能在返回一個迭代值

std::find(begin(), end(), value)返回迭代器,如果未找到該值返回end()函數返回。要檢查它,你說:

std::list<int> l; 
... 
auto found = std::find(l.begin(), l.end(), 6); // returns an std::list::iterator 
if (found == l.end()) 
{ 
    std::cout << "Bogus!" << std::endl; 
} 
... 

有在容器發現返回一個值,並使用特殊值「找不到」

std::string s = "go to the store"; 
auto found = s.find('x'); // returns a size_t index into the string 
if (found == std::string::npos) 
{ 
    std::cout << "Bogus!" << std::endl; 
} 

返回nullptr如果是有意義的其他例子來支持你函數返回一個指針。在這種情況下,nullptr將是未找到的合理哨點值。

1

在搜索列表時返回「未找到值」的正常接受方式是返回指向列表末尾的迭代器。在這種情況下,link.end()

這正是<algorithm>std::find算法的行爲方式。

在您的通話功能測試返回的迭代器如下:

list<LINKS>::iterator itr = find_link(list, "Funyuns"); 
if(itr == list.end()) { 
    std::cout << "You are all out of Funyons :-(" << std::endl; 
}