Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost mpl列表和自动测试案例模板编译错误_C++_Boost - Fatal编程技术网

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);
}