Re: [Cppcms-users] Compile error: traits is not a template
Brought to you by:
artyom-beilis
From: Artyom B. <art...@ya...> - 2012-09-01 09:41:48
|
Because shared_ptr<group> is not specialized for traits... You need manually create an array and sets its memebers.i.e Something like that: cppcms::json::array &a=v.at("values",cppcms::json::array()); a.resize(in.values_.size()); for(size_t i = 0;i<in.values_.size();i++) a[i]=*in.values_[i]; Artyom Beilis -------------- CppCMS - C++ Web Framework: http://cppcms.com/ CppDB - C++ SQL Connectivity: http://cppcms.com/sql/cppdb/ >________________________________ > From: 陈抒 <csf...@gm...> >To: Artyom Beilis <art...@ya...>; cpp...@li... >Sent: Saturday, September 1, 2012 10:05 AM >Subject: Re: [Cppcms-users] Compile error: traits is not a template > > >Thank you. But I see new error. >groups.h file: > > >#ifndef __GROUPS_H >#define __GROUPS_H > > >#include <vector> >#include <boost/shared_ptr.hpp> >#include "group.h" > > >namespace kaimei{ > > > class groups{ > public: > typedef std::vector<boost::shared_ptr<group> >::iterator iterator; > typedef std::vector<boost::shared_ptr<group> >::const_iterator const_iterator; > > > void add(boost::shared_ptr<group> g); > > > bool empty() const; > > > unsigned int size() const; > > > std::string json_string() const; > > friend class cppcms::json::traits<kaimei::groups>; > > > private: > std::vector<boost::shared_ptr<kaimei::group> > values_; > }; > > >} > > >namespace cppcms { > namespace json { > > > template<> > struct traits<kaimei::groups> { > > > static void set(value &v, kaimei::groups const& in) { >v.set("size", in.size()); >v.set("values", in.values_); > } > }; > > > } >} > > >#endif > > > > >error message: > 3%] Generating ../../src/view/welcome.cpp, ../../src/view/home.cpp, ../../src/view/gprs_message.cpp, ../../src/view/gprs_manager.cpp, ../../src/view/gprs_password.cpp, ../../src/view/gprs_log.cpp, ../../src/view/register_client.cpp, ../../src/view/gprsConfig.cpp, ../../src/view/login.cpp, ../../src/view/group_management.cpp >[ 6%] Building CXX object bin/CMakeFiles/cppweb.dir/groups.cpp.o >In file included from /home/chenshu/work/kaimei/cppweb/include/group.h:5:0, > from /home/chenshu/work/kaimei/cppweb/include/groups.h:6, > from /home/chenshu/work/kaimei/cppweb/src/groups.cpp:1: >/usr/include/cppcms/json.h: In member function ‘void cppcms::json::value::set_value(const T&) [with T = boost::shared_ptr<kaimei::group>]’: >/usr/include/cppcms/json.h:604:5: instantiated from ‘static void cppcms::json::traits<std::vector<T> >::set(cppcms::json::value&, const std::vector<T>&) [with T = boost::shared_ptr<kaimei::group>]’ >/usr/include/cppcms/json.h:247:4: instantiated from ‘void cppcms::json::value::set_value(const T&) [with T = std::vector<boost::shared_ptr<kaimei::group> >]’ >/usr/include/cppcms/json.h:316:4: instantiated from ‘cppcms::json::value::value(const T&) [with T = std::vector<boost::shared_ptr<kaimei::group> >]’ >/usr/include/cppcms/json.h:352:4: instantiated from ‘void cppcms::json::value::set(const char*, const T&) [with T = std::vector<boost::shared_ptr<kaimei::group> >]’ >/home/chenshu/work/kaimei/cppweb/include/groups.h:39:28: instantiated from here >/usr/include/cppcms/json.h:247:4: error: incomplete type ‘cppcms::json::traits<boost::shared_ptr<kaimei::group> >’ used in nested name specifier >make[2]: *** [bin/CMakeFiles/cppweb.dir/groups.cpp.o] Error 1 >make[1]: *** [bin/CMakeFiles/cppweb.dir/all] Error 2 >make: *** [all] Error 2 > > >陈抒 >Best regards >http://blog.csdn.net/sheismylife > > > >On Sat, Sep 1, 2012 at 2:34 PM, Artyom Beilis <art...@ya...> wrote: > >> >> >>>But I got error when compiling another class. It has group.h and group.cpp file. >>> >>> >>>#ifndef __GROUP_H >>>#define __GROUP_H >>> >>> >>>#include <string> >>> >>> >>>namespace kaimei{ >>>... >> >>} >>> >>> >>>namespace cppcms { >>> namespace json { >>> template<> >>> struct traits<kaimei::group> { >>>... >>> } >>> } >>>} >>> >>> >>> >>> [snip] >> >>> >>>I am not good at template programming. Why did this happen? >>> >> >>You can't specialize undefined struct - you need to include <cppcms/json.h> >>header. It provides the original traits struct and than you specialize it for >>your type of class >> >> >> >>> >>>陈抒 >>>Best regards >>>http://blog.csdn.net/sheismylife >>> >> >>Regards, >>Artyom >> >> >>------------------------------------------------------------------------------ >>Live Security Virtual Conference >>Exclusive live event will cover all the ways today's security and >>threat landscape has changed and how IT managers can respond. Discussions >>will include endpoint security, mobile security and the latest in malware >>threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>_______________________________________________ >>Cppcms-users mailing list >>Cpp...@li... >>https://lists.sourceforge.net/lists/listinfo/cppcms-users >> > >------------------------------------------------------------------------------ >Live Security Virtual Conference >Exclusive live event will cover all the ways today's security and >threat landscape has changed and how IT managers can respond. Discussions >will include endpoint security, mobile security and the latest in malware >threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >_______________________________________________ >Cppcms-users mailing list >Cpp...@li... >https://lists.sourceforge.net/lists/listinfo/cppcms-users > > > |