2016-02-18 3 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; 

} 

После каждого цикла, перед тем MyInterMap++ я пытаюсь разъединить файл, основываясь на значении key в качестве имени файла. например:

unlink ("/tmp/" + key);

Когда я пробую и Скомпилируйте я получаю:

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 до UNLINK функции:

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

Это, вероятно, не является проблемой в этом случае, как unlink вряд ли хранить указатель C строку в любом месте, но учтите, что указатель становится свисающим, как только переменная filename выходит за пределы области видимости. Если вы передадите указатель на строку C, полученную из std::string в любом месте, убедитесь, что этот указатель не используется после уничтожения std::string.

0

Я разрешил его помощью

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

Благодарности

Смежные вопросы