Re: [Cppcms-users] Compile error: traits is not a template
Brought to you by:
artyom-beilis
From: 陈抒 <csf...@gm...> - 2012-08-31 15:59:11
|
Forgot another class: groups . It contains several group objects in vector. Here is groups.h content: #ifndef __GROUPS_H #define __GROUPS_H #include <vector> #include <boost/shared_ptr.hpp> #include "group.h" 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 cppcms::json::traits<kaimei::group>; private: std::vector<boost::shared_ptr<group> > values_; }; namespace cppcms { namespace json { template<> struct traits<kaimei::groups> { static void set(value &v, kaimei::groups const& in) { v.set("size", groups.size()); v.set("values", in.values_); } }; } } #endif 陈抒 Best regards http://blog.csdn.net/sheismylife On Fri, Aug 31, 2012 at 11:36 PM, 陈抒 <csf...@gm...> wrote: > I have a correct class with no compilation error. All codes in response.h: > #ifndef __RESPONSE_H > #define __RESPONSE_H > > namespace kaimei{ > class response { > public: > enum > {OK=0,SAVE_EMAIL_ERROR=1,CHANGE_PWD_ERROR=2,LOGIN_ERROR=3,CREATE_ACCOUNT_ERROR=4, > SAVE_MESSAGE_ERROR=5,CHANGE_LANGUAGE_ERROR=6,NONE_CONTENT=7,LOAD_DISPLAY_ERROR=8, > > NONE_USER_ID=9,GET_MESSAGE_LOG_ERROR=10,QUIT_ERROR=11,NONE_ADMIN=12,BIND_ERROR=13, > UPDATE_DESCRIPTION_ERROR=14,UNBIND_ERROR=15,LOAD_GROUPS_ERROR=16,UPDATE_GROUP_NAME_ERROR=17 > }; > int status; > string message; > string value; > }; > } > > namespace cppcms { > namespace json { > > template<> > struct traits<kaimei::response> { > > static void set(value &v, kaimei::response const& in) { > v.set("status", in.status); > v.set("message", in.message); > v.set("value", in.value); > } > }; > > } > } > > #endif > > > 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{ > class group { > public: > group(); > > std::string id; > std::string description; > std::string name; > int device_number; > > std::string json_string() const; > }; > } > > namespace cppcms { > namespace json { > > template<> > struct traits<kaimei::group> { > > static void set(value &v, kaimei::group const& in) { > v.set("id", in.id); > v.set("description", in.description); > v.set("name", in.name); > v.set("deviceNumber", in.device_number); > } > }; > > } > } > > > #endif > > Error output: > > [ 3%] Building CXX object bin/CMakeFiles/cppweb.dir/groups.cpp.o > In file included from > /home/chenshu/work/kaimei/cppweb/include/groups.h:6:0, > from /home/chenshu/work/kaimei/cppweb/src/groups.cpp:1: > /home/chenshu/work/kaimei/cppweb/include/group.h:24:14: error: ‘traits’ is > not a template > /home/chenshu/work/kaimei/cppweb/include/group.h:24:36: error: explicit > specialization of non-template ‘cppcms::json::traits’ > /home/chenshu/work/kaimei/cppweb/include/group.h:26:23: error: ‘value’ has > not been declared > /home/chenshu/work/kaimei/cppweb/include/group.h: In static member > function ‘static void cppcms::json::traits::set(int&, const > kaimei::group&)’: > /home/chenshu/work/kaimei/cppweb/include/group.h:27:4: error: request for > member ‘set’ in ‘v’, which is of non-class type ‘int’ > /home/chenshu/work/kaimei/cppweb/include/group.h:28:4: error: request for > member ‘set’ in ‘v’, which is of non-class type ‘int’ > /home/chenshu/work/kaimei/cppweb/include/group.h:29:4: error: request for > member ‘set’ in ‘v’, which is of non-class type ‘int’ > /home/chenshu/work/kaimei/cppweb/include/group.h:30:4: error: request for > member ‘set’ in ‘v’, which is of non-class type ‘int’ > > > I am not good at template programming. Why did this happen? > > > 陈抒 > Best regards > http://blog.csdn.net/sheismylife > |