C++ Boost mpl列表和自动测试案例模板编译错误
我已经和编译器斗争了一段时间了。这是我的密码:C++ Boost mpl列表和自动测试案例模板编译错误,c++,boost,C++,Boost,我已经和编译器斗争了一段时间了。这是我的密码: #include <boost/test/unit_test.hpp> #include <boost/mpl/list.hpp> namespace MyMessageNamespace { class ParticularMessage { template <int N> void SetSomething(int myValue) {}; }; }
#include <boost/test/unit_test.hpp>
#include <boost/mpl/list.hpp>
namespace MyMessageNamespace
{
class ParticularMessage
{
template <int N>
void SetSomething(int myValue) {};
};
}
template <typename MyMessageT>
struct MyMessage
{
using MyMessageType = MyMessageT;
};
using MyMessages = boost::mpl::list<MyMessage<MyMessageNamespace::ParticularMessage>>;
BOOST_AUTO_TEST_CASE_TEMPLATE(MyTestCase, MyMessage, MyMessages)
{
typename MyMessage::MyMessageType message;
message.SetSomething<1>(20);
}
#包括
#包括
名称空间MyMessageNamespace
{
类特殊信息
{
模板
void SetSomething(int myValue){};
};
}
模板
结构MyMessage
{
使用MyMessageType=MyMessageT;
};
使用MyMessages=boost::mpl::list;
BOOST\u AUTO\u TEST\u CASE\u模板(MyTestCase、MyMessage、MyMessages)
{
typename MyMessage::MyMessageType message;
消息集(20);
}
以下是我得到的错误:
错误:必须调用对非静态成员函数的引用:message.SetSomething(20)代码>
你有两个问题(第二个问题你会踢自己)
首先,SetSomething
是一种依赖模板类型。使用模板
关键字更正此问题:
BOOST_AUTO_TEST_CASE_TEMPLATE(MyTestCase, MyMessage, MyMessages)
{
typename MyMessage::MyMessageType message;
message.template SetSomething<1>(20);
}
作为参考,这本书现在为我编译(apple clang 7.3.0)
#包括
#包括
名称空间MyMessageNamespace
{
类特殊信息
{
公众:
模板
void SetSomething(int myValue){};
};
}
模板
结构MyMessage
{
使用MyMessageType=MyMessageT;
};
使用MyMessages=boost::mpl::list;
BOOST\u AUTO\u TEST\u CASE\u模板(MyTestCase、MyMessage、MyMessages)
{
typename MyMessage::MyMessageType message;
消息模板集合(20);
}
用-std=c++14编译你有两个问题(第二个问题你会自责)
首先,SetSomething
是一种依赖模板类型。使用模板
关键字更正此问题:
BOOST_AUTO_TEST_CASE_TEMPLATE(MyTestCase, MyMessage, MyMessages)
{
typename MyMessage::MyMessageType message;
message.template SetSomething<1>(20);
}
作为参考,这本书现在为我编译(apple clang 7.3.0)
#包括
#包括
名称空间MyMessageNamespace
{
类特殊信息
{
公众:
模板
void SetSomething(int myValue){};
};
}
模板
结构MyMessage
{
使用MyMessageType=MyMessageT;
};
使用MyMessages=boost::mpl::list;
BOOST\u AUTO\u TEST\u CASE\u模板(MyTestCase、MyMessage、MyMessages)
{
typename MyMessage::MyMessageType message;
消息模板集合(20);
}
用-std=c++14编译后,我现在得到了这个错误:没有匹配的成员函数来调用'SetSomething'@JonathonHill,而你将SetSomething公之于众?@JonathonHill我会将完整的更正程序添加到答案中抱歉,我的错误不明显。我在这里解决了问题,但没有在我的副本上解决问题。我现在得到了一个错误:没有匹配的成员函数来调用'SetSomething'@JonathonHill,而你将SetSomething公开了?@JonathonHill我将在回答中添加完整的更正程序抱歉,我的错误不明显。我在这里做了安排,但没有在我的副本上
#include <boost/test/unit_test.hpp>
#include <boost/mpl/list.hpp>
namespace MyMessageNamespace
{
class ParticularMessage
{
public:
template <int N>
void SetSomething(int myValue) {};
};
}
template <typename MyMessageT>
struct MyMessage
{
using MyMessageType = MyMessageT;
};
using MyMessages = boost::mpl::list<MyMessage<MyMessageNamespace::ParticularMessage>>;
BOOST_AUTO_TEST_CASE_TEMPLATE(MyTestCase, MyMessage, MyMessages)
{
typename MyMessage::MyMessageType message;
message.template SetSomething<1>(20);
}