2014-01-17 2 views
0

У меня есть следующий код:Как перевести вектор в функцию

void func(char *vChar); 

int main(void){ 
    std::vector<char*> vChar; 
    vChar.push_back("Bla Bla Bla"); 

    func(vChar); 
    return 0; 
} 

void func(char *vChar){ 
    std::cout << vChar->size; 
} 

Я не знаю, он говорит, я не могу преобразовать вектор на символ *. Тогда я спрашиваю, какой тип vChar? это то же самое, что и char * в int tab [] (я имею в виду, что tab is int *)?

+0

В вашем коде «func» принимает char * vChar - он должен быть вектором & vChar –

ответ

2

Если вы хотите передать вектор, дать вашу функции параметр, который является либо вектором, либо ссылка на вектор:

void func(const vector<const char*>& vChar); // const ref if you won't modify it 

Обратите внимание, что строковые литералы не должны быть привязаны к неконстантным ссылкам (это устарел на C++ 11), поэтому сделайте вектор vector<const char*> или vector<string>, если вы хотите, чтобы он владел данными.

+0

Почему он не рекомендуется в C++ 11? почему я должен использовать по крайней мере const char *? – Babbaddo

+0

@Babbaddo Это не просто не рекомендуется - это устарело. Вы не можете этого сделать. Вы никогда не должны были это делать в первую очередь. Проблема в том, что строковые литералы хранятся в разделе памяти только для чтения. Вы не сможете изменять символы в них. Тем не менее, 'char *' позволил бы вам, со страшными последствиями. –

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