Re: [Cppcms-users] Compile error: traits is not a template
Brought to you by:
artyom-beilis
From: 陈抒 <csf...@gm...> - 2012-09-01 13:27:24
|
Also, when I said deep copy, I mean the following codes: for(size_t i = 0;i<in.values_.size();i++) a[i]=*in.values_[i]; 陈抒 Best regards http://blog.csdn.net/sheismylife On Sat, Sep 1, 2012 at 9:24 PM, 陈抒 <csf...@gm...> wrote: > I tried you codes the first time. It can't be compiled. > > $ make > Scanning dependencies of target cppweb > [ 3%] Building CXX object bin/CMakeFiles/cppweb.dir/groups.cpp.o > In file included from /home/chenshu/work/kaimei/cppweb/src/groups.cpp:1:0: > /home/chenshu/work/kaimei/cppweb/include/groups.h: In static member > function ‘static void > cppcms::json::traits<kaimei::groups>::set(cppcms::json::value&, const > kaimei::groups&)’: > /home/chenshu/work/kaimei/cppweb/include/groups.h:39:60: error: invalid > initialization of non-const reference of type ‘cppcms::json::array& {aka > std::vector<cppcms::json::value>&}’ from an rvalue of type ‘void’ > make[2]: *** [bin/CMakeFiles/cppweb.dir/groups.cpp.o] Error 1 > make[1]: *** [bin/CMakeFiles/cppweb.dir/all] Error 2 > make: *** [all] Error 2 > > line 39 is : > cppcms::json::array &a=v.at("values",cppcms::json::array()); > > I upgraded CppCMS to latest version, also read your API document. > It seems your 'at' member function return 'void' > > 陈抒 > Best regards > http://blog.csdn.net/sheismylife > > > On Sat, Sep 1, 2012 at 9:15 PM, Artyom Beilis <art...@ya...> wrote: > >> You hadn't read my code correctly >> >> cppcms::json::array &a=v.at("values",cppcms::json::array()); >> >> a is a reference and you fill it. >> >> Anyway read the cppcms::json::value reference documentation for further >> details >> >> 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 3:32 PM >> >> *Subject:* Re: [Cppcms-users] Compile error: traits is not a template >> >> I changed your codes a bit. >> namespace cppcms { >> namespace json { >> >> template<> >> struct traits<kaimei::groups> { >> >> static void set(value &v, kaimei::groups const& in) { >> v.set("size", in.size()); >> cppcms::json::array a; >> a.resize(in.values_.size()); >> for(size_t i = 0; i < in.values_.size(); i++) { >> a[i]=*in.values_[i]; >> } >> v.set("values", a); >> } >> }; >> >> } >> } >> >> Two issues: >> 1. This way is not efficient, a lot of deep copy would occur when copying >> vector from array. >> My original way is very simple, create a stringstream object, groups >> object converts all member variables into string, append them to >> stringstream. It does not looks elegant, but faster. >> 2. It doesn't work. I got an exception: >> cppcms::json::bad_cast: error converting from object >> >> >> 陈抒 >> Best regards >> http://blog.csdn.net/sheismylife >> >> >> On Sat, Sep 1, 2012 at 5:41 PM, Artyom Beilis <art...@ya...>wrote: >> >> 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 >> > >> > >> > >> >> >> ------------------------------------------------------------------------------ >> 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 >> >> >> >> >> ------------------------------------------------------------------------------ >> 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 >> >> > |