From: xuxq <xqx...@ho...> - 2013-03-22 11:09:50
|
Hello all, I met problem when wrapping C++ to Ruby with SWIG related statement using ::std::vector in c++ header file. It seems that SWIG does not recognize "using ::std::vector" statement. I am using swig 2.0.8. I don't know if my have a wrong usage or SWIG does not support it. after running the ruby script at the end, it reports "undefined method size()" for the last line.If I remove "using ::std::vector" in the header file. And change the signature of "vector<Animal> getAnimals()" to "std::vector<Animal> getAnimals()", the ruby script works good. Can you provide any hints? Thanks a lot! Best Regards,Fiona Xu Here is my .i file.%{#include "Animal.hpp"%} %include "std_string.i"%include "std_vector.i"%include "Animal.hpp" %template(StringVector) std::vector<std::string>;%template(IntVector) std::vector<int>;%ignore std::vector<Animal>::resize(size_type);%ignore std::vector<Animal>::vector(size_type); %template(AnimalVector) vector<Animal>; Here is my .hpp file.#include <string>#include <vector> using ::std::vector;using ::std::string class Animal{public: Animal(std::string); ~Animal(); std::string getName(); vector<Animal> getAnimals();} Here is my ruby script. cat = Example::Animal.new("cat");animal = Example::AnimalVector.new();animal.push(cat); dog = Example::Animal.new("dog");animal.push(dog);for i in 0..1 printf "name is: %s\n", animal[i].getName();end animals = cat.getAnimals();printf "There are : %d animals\n", animals.size; |