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
>
|