2009-07-23 7 views
1

Je le code suivant enveloppé par rasade:Comment puis-je retourner un pointeur vers un objet de classe définie par l'utilisateur en utilisant SWIG

int 
cluster::myController(controller*& _controller) { 
    _controller = my_controller; 
    return 0; 
} 

controller a un constructeur privé.

Quelle est l'incantation correcte pour faire quelque chose comme ceci pas jeter une exception?

public static void main(String argv[]) { 
    controller c = null; 
    int r = dan_cluster.theCluster().myController(c); 
    System.out.println(r); 
    System.out.println(c.getUUID()); 
    } 

Répondre

1

Il serait utile si vous deviez poster l'exception que vous obtenez, mais je ne crois pas que ce que vous essayez de faire est possible. En C++ vous pouvez passer un pointeur par référence et donc apporter des modifications à une variable pointeur passée à une fonction, mais en Java il n'y a rien d'équivalent. Vous devriez vérifier l'emballage généré, mais je pense que votre code C++ est enveloppée comme quelque chose comme:

int myController(controller _controller) { 
    _controller = my_controller; 
    return 0; 
} 

... qui clairement ne pas faire ce que vous voulez, ce qui conduit à un NullPointerException lorsque vous essayez de getUUID().

En supposant que j'ai raison, la meilleure solution pour myController() est de renvoyer un contrôleur *. Si vous avez vraiment besoin de l'entier, pensez à retourner une paire std :: (note: encapsuler n'importe quelle partie de la stl nécessite de la délicatesse, consultez le documentation).

+0

Désolé, de * cours * c'est un null-pointeur deref. J'aurais dû être plus clair. J'ai besoin de l'int parce que dans certains cas (pas cette méthode, attention à vous), nous devons renvoyer un code d'échec. std :: la paire c'est! –