Pregunta

Por lo tanto, tiene un código, que compiló en MSVC 9 y algunos anterior (¡no sé a qué distancia se va ...), GCC, MinGW, GCC en Mac ...

Sin embargo, una línea, no se compila en MSVC:

class_< vector<unsigned int> >("LayerList")
.def(constructor<>())
.def("GetCount", &vector<unsigned int>::size)
.def("Get",  &NumberGet)
.def("Add", &vector<unsigned int>::push_back) //this line refuses to compile
.def("__tostring", &LayerListToString)

Si comento que, la aplicación compila bien (pero se rompe en tiempo de ejecución), si muevo este bloque en otro lugar (incluso en otros archivos) esta línea sigue dando errores ... cambiar el orden en el interior del bloque no resuelve él también.

Da 9 errores, la mayoría de ellos sobre un número incorrecto de argumentos en .def (algunos dicen que hay 2 argumentos cuando se espera que 1, 3, 5 y uno dice "demasiado argumentos"), y un poco acerca de la sobrecarga en su defecto, la más obvia:

  

error 7 error C2914: ':: luabind clase _ :: def': argumento de plantilla no se puede deducir como argumento de la función es ambiguou E: \ novashellSVN \ clanlibstuff \ novashell \ source \ ListBindings.cpp 178

Esto me hizo perder toda la jornada de trabajo ... Alguien ha ninguna pista sobre lo que ha cambiado en MSVC 10 para causar esto? No es más, incluso me molesta debido al trabajo pegado, pero debido a la forma desconcertante y extraño que es.

EDIT:? He comparado el archivo "vector", desde MSVC 10, con otra MSVC y GCC, y de hecho en MSVC tiene 3 versiones, alguien saben exactamente cómo hacer que cargue una versión específica

Las tres versiones:

void push_back(const _Ty& _Val) //the one in GCC and older MSVC, thus the one I want
void push_back(_Ty&& _Val)
void push_back(bool _Val)
¿Fue útil?

Solución

Si ha sobrecargado funciones debe especificar que desea utilizar por colada "y vector :: push_back" para la función correcta. Debe comprobar la documentación luabind para la sintaxis.

Tal vez ahora hay varios métodos llamados "push_back" y debe especificar cuál utilizar?

Otros consejos

Como dice Nikko, se debe seleccionar la sobrecarga correcta. Esto es un poco de C ++ PITA.

Uso static_cast <> para fundición a un push_back-fn-PTR-a memoria del tipo correcto. es decir, algo así como lo siguiente:

.def("push_back", static_cast<void (std::vector<unsigned int>::*)(const unsigned int)>(&std::vector<unsigned int>::push_back))

(100% seguro de los detalles, pero esa es la esencia general de la misma ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top