2016-02-18 74 views
0

我正在使用此代碼,我發現在stackoverflow ..這似乎很適合我的要求。當試圖取消鏈接文件時編譯C++錯誤

#include <stdio.h> 
#include <iostream> 
#include <string> 
#include <map> 
#include <conio.h> 

int main() { 

    std::map< std::string, std::string > MyMap; 
    std::map< std::string, std::string >::iterator MyIterMap; 

     MyMap["Teste1"] = "map1"; 
     MyMap["Teste2"] = "map2"; 
     MyMap["Teste3"] = "map3"; 

    MyIterMap = MyMap.begin(); 

    while(MyIterMap != MyMap.end()) { 
     std::string key = (*MyIterMap).first; 

     std::cout << "Key: " << key << ", Value: " << MyMap[key] <<std::endl; 
     MyIterMap++; 
    } 
    _getch(); 
    return 0; 

} 

每個循環之後,​​之前,我試圖取消鏈接的基礎上key值作爲文件名的文件。例如:

unlink ("/tmp/" + key);

當我嘗試和complie我得到:

In function ‘int main()’: 

error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ for argument ‘1’ to ‘int unlink(const char*)’ 

可以請一些一個提醒我該怎麼做呢?

謝謝你的時間。

+0

對不起,我已經整理這個..我意識到我做,因爲我讀這回.. – Tom

+0

這解決了它解決它:'unlink((「/ tmp /」+ key).c_str());' – Tom

+0

爲了未來人類的利益,請隨時自己回答這個問題! – Claudiu

回答

0

您需要將指針傳遞給C字符串來取消鏈接功能:

const std::string filename = "/tmp/" + key; 
unlink(filename.c_str()); 

它可能不是在這種情況下,一個問題unlink不大可能存儲C字符串指針的任何地方,但千萬注意,只要變量filename超出範圍,指針就會變成懸掛狀態。如果將指針傳遞給從std::string任意位置獲得的C字符串,請確保在銷燬std::string後指針不會被使用。

0

我用

unlink(("/tmp/" + key).c_str()) ;

感謝