2017-08-04 1 views
-4

Voici un exemple simplifié du code sur lequel je travaille. Il y a une fonction qui prend un pointeur de classe A en tant qu'argument. Je veux passer un pointeur qui a été initialisé comme nullptr. Sans l'initialiser à une valeur temporaire d'ordures, est-il possible de passer le nullptr?Comment passer un nullptr?

class A 
{ 
    // stuff 
}; 

class B 
{ 
public: 
    A* pA1; 
    A objA; 
    std::vector<A*> vecB; 
    B() : pA1 (nullptr) { vecB.push_back(&objA); } 
}; 

void function(A* p); 

A* pA2; 

int main() 
{ 
    B objB; 
    pA2 = objB.vecB[0]; 
    function(objB.pA1); 

    return 0; 
} 

void function(A* p) 
{ 
    p = pA2; 
} 
+0

Ce n'est pas clair pour moi ce que vous essayez de faire dans votre programme. –

+0

Le but de la fonction est d'y arriver: \t objB.pA1 = pA2 –

+1

Notez que le 'p' dans la définition de' function' est son propre pointeur initialisé à partir d'une * copie * de l'argument que vous avez passé. Donc l'affecter n'aura un effet que dans 'function', et aucun effet sur les autres objets pointeurs. Si vous vouliez modifier un autre pointeur, vous auriez besoin de quelque chose comme 'void function (A * & p)'. – aschepler

Répondre

3

Dans un commentaire, vous avez dit:

Le point de la fonction est de ce faire: objB.pA1 = pA2

Je pense que ce que vous devez faire est de passer un référence au pointeur, au lieu de passer un pointeur par valeur. Utilisation:

void function(A*& p) // The argument type needs to be "A* &", not "A*" 
{ 
    // Now, the change will be visible in the calling program. 
    p = pA2; 
} 
2

Oui. Tout type de pointeur brut peut être affecté et donc initialisé avec la valeur nullptr. Exemple:

static A* pA2 = nullptr; 
+0

Le pointeur que je passe a déjà été initialisé en tant que nullptr. –

0

aschepter m'a donné la réponse dans un commentaire, merci beaucoup.

void function(A* p) 

devrait être

void function(A*& p)