[C++-sig] Compile error with tutorial
David Huebel
davidhuebel at gmail.com
Tue Dec 13 06:25:15 CET 2005
Hi,
I'm just getting started with Boost Python, using boost_1_32_0. The
following code (which should look familiar) compiles and runs just
fine:
char const* greet()
{
return "hello, world";
}
#include <string>
/*
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
*/
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
def("greet", greet);
/*
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
*/
}
When I uncomment the two sections referring to World, I get the
following compile error:
...found 652 targets...
...updating 2 targets...
gcc-C++-action bin/tutorial/hello.so/gcc/debug/shared-linkable-true/hello.o
hello.cpp: In function `void init_module_hello()':
hello.cpp:26: wrong number of template arguments (1, should be 4)
/home/cdt/lib/boost_1_32_0/boost/python/def_visitor.hpp:14: provided for `
template<class T, class X1, class X2, class X3> struct boost::python::class_
'
set -e
"g++" -c -Wall -ftemplate-depth-255 -DBOOST_PYTHON_DYNAMIC_LIB
-g -O0 -fno-inline -fPIC -I"bin/tutorial" -I
"/usr/include/python2.2" -I "/home/cdt/lib/boost_1_32_0" -o
"bin/tutorial/hello.so/gcc/debug/shared-linkable-true/hello.o"
"hello.cpp"
"/usr/bin/objcopy" --set-section-flags .debug_str=contents,debug
"bin/tutorial/hello.so/gcc/debug/shared-linkable-true/hello.o"
...failed gcc-C++-action
bin/tutorial/hello.so/gcc/debug/shared-linkable-true/hello.o...
...removing bin/tutorial/hello.so/gcc/debug/shared-linkable-true/hello.o
...skipped <@tutorial/hello.so/gcc/debug/shared-linkable-true>hello.so
for lack of <@tutorial/hello.so/gcc/debug/shared-linkable-true>hello.o...
...failed updating 1 target...
...skipped 1 target...
Line 26 is the line containing class_. I'm using gcc 3.2.3 and python
2.2.3 on Linux. What am I doing wrong?
As an aside, I found it very difficult to figure out how to build
extensions outside the Boost build tree and then how to build an
extension based on a separately compiled object. My problem was that
I started with no knowledge of Jam and no idea how much Jam I should
learn before tackling Boost Python. I think it would be a good
addition to the tutorial to recommend learning the Jam syntax and the
basic Jambase rules for linking C++ projects before attempting to
deviate from the tutorial build setup.
Thanks,
David Huebel
More information about the Cplusplus-sig
mailing list