2015-05-04 3 views
0

У меня есть функция API, которая проходит адрес вектора:передавая указатель на функцию API

function_A() 
{    
    function_B(); 
} 

function_B() 
{ 
    vector<int> tempVector; 
    function(&tempVector[0]); // <---- API function: fills the vector with values 
    ... 
} 

Создание tempVector находится в function_B и он прекрасно работает.

Я хочу, чтобы создание tempVector было в function_A и передать указатель на него, поэтому другие функции в программе также будут использовать данные внутри tempVector.

Я попытался передать указатель на tempVector по нескольким причинам: function(...), но я всегда получаю ошибки.

function_A() 
{   
    vector<int> tempVector; // <--- creation here 
    function_B(&tempVector); // pass its address 

    //use tempVector 
} 

function_B(vector<int> * tempVector) // receive its address 
{ 

    function(); // <---- API function: how should I pass tempVector? 
    ... 
} 
+0

ли вы попробовать 'tempVector-> данные()' или '& ((* tempVector) [0])'? –

+1

Как функция '(') заполняет вектор, если вектор пуст? Это пахнет неопределенным поведением. – rozina

ответ

0

Pass его как указатель:

function_B(vector<int> * tempVector) // receive its address 
{ 

    function(tempVector); 
    ... 
} 

function(vector<int> * tempVector) 
{ 
    ... 
} 

ИЛИ, passit в качестве переменной:

function_B(vector<int> * tempVector) // receive its address 
{ 

    function(*tempVector); 
    ... 
} 

function(vector<int> tempVector) 
{ 
    ... 
} 
2

почему пройти его как указатель C, а не в качестве ссылки на C++?

function_A() 
{   
    vector<int> tempVector; 
    function_B(tempVector); 

    //use tempVector 
} 

function_B(vector<int>& tempVector) 
{ 

    function(&tempVector[0]); 
    ... 
} 
0

Вы должны разыменования указателя, как обычно, как:

function_B(vector<int> * tempVector) { 
    function(&(*tempVector)[0]); 
} 
Смежные вопросы