mqtt_cpp icon indicating copy to clipboard operation
mqtt_cpp copied to clipboard

Compile Error In visual studio 2017

Open runner66 opened this issue 2 years ago • 7 comments

as document said "It requires C++14 and the Boost Libraries 1.67.0 or later.", but when comiple in VS (with boost1.68+cpp14), I get serveal errors. boost_1_68_0\boost\variant\detail\make_variant_list.hpp(40): error C2977: “boost::mpl::list”: boost_1_68_0\boost\variant\detail\make_variant_list.hpp(40): error C2955: “boost::mpl::list”:

Only when I define MQTT_STD_VARIANT with cpp17, I can compile sucess.

runner66 avatar Mar 25 '22 03:03 runner66

On clang++ (13.0.1) -std=c++14, Boost 1.78.0, MQTT_STD_VARIANT=OFF cmake option (MQTT_STD_VARIANT preprocessor macro is not defined), no errors are reported. C2977 means too many template arguments.

https://github.com/redboltz/mqtt_cpp/blob/f1ebfbfc111bd99b1f131e5f28f7c2b9067947c5/include/mqtt/config.hpp#L12-L29

mqtt_cpp set to the limit list size to 40 if it is not defined.

Those information might help you to analyze the problem.

redboltz avatar Mar 25 '22 06:03 redboltz

Perhaps, insert

#include <mqtt/variant.hpp>

into the top of your source code (cpp file) might solve the error.

If it is solved please let me know the current include information.

redboltz avatar Mar 25 '22 06:03 redboltz

Yes, It works. ths a little weird...

runner66 avatar Mar 25 '22 06:03 runner66

another puzzle, what's the difference mqtt_cpp-12.0.0 and mqtt_cpp-master? seems code is not absolutly the same

runner66 avatar Mar 25 '22 06:03 runner66

Yes, It works. ths a little weird...

Oh really, I need your source code (mqtt_cpp include part) to fix the issue. So far, I only know the error code. I cant't fix it.

Maybe https://github.com/redboltz/mqtt_cpp/blob/f1ebfbfc111bd99b1f131e5f28f7c2b9067947c5/include/mqtt/client.hpp#L10 https://github.com/redboltz/mqtt_cpp/blob/f1ebfbfc111bd99b1f131e5f28f7c2b9067947c5/include/mqtt_client_cpp.hpp#L7 are related.

redboltz avatar Mar 25 '22 06:03 redboltz

another puzzle, what's the difference mqtt_cpp-12.0.0 and mqtt_cpp-master? seems code is not absolutly the same

You can compare by yourself https://github.com/redboltz/mqtt_cpp/compare/v12.0.0...master

redboltz avatar Mar 25 '22 06:03 redboltz

Ok, ths. I try to compile the same code in Linux OS with vscode, but get a lot of errors, any tips?

mqtt/will.hpp:47:23: error:enclosing class of constexpr non-static member function ‘mqtt::buffer& mqtt::will::topic()’ is not a literal type constexpr buffer& topic() { ^ mqtt/will.hpp:50:29: error:enclosing class of constexpr non-static member function ‘const mqtt::buffer& mqtt::will::message() const’ is not a literal type constexpr buffer const& message() const { ^ mqtt/will.hpp:53:23: error:enclosing class of constexpr non-static member function ‘mqtt::buffer& mqtt::will::message()’ is not a literal type constexpr buffer& message() { ^ mqtt/will.hpp:56:22: error:enclosing class of constexpr non-static member function ‘mqtt::retain mqtt::will::get_retain() const’ is not a literal type constexpr retain get_retain() const { ^ mqtt/will.hpp:59:19: error:enclosing class of constexpr non-static member function ‘mqtt::qos mqtt::will::get_qos() const’ is not a literal type constexpr qos get_qos() const { ^ mqtt/will.hpp:62:37: error:enclosing class of constexpr non-static member function ‘const properties& mqtt::will::props() const’ is not a literal type constexpr v5::properties const& props() const { ^ mqtt/will.hpp:65:31: error:enclosing class of constexpr non-static member function ‘mqtt::v5::properties& mqtt::will::props()’ is not a literal type constexpr v5::properties& props() {

runner66 avatar Mar 25 '22 07:03 runner66