如何解决使用类作为数据类型时,如何在std :: variant中存储值?
我创建了一个类,并将该类用作std :: variant的数据类型。但是当我存储值时,由于显示了一些错误,我无法访问它。
#include <variant>
#include <string>
#include <iostream>
class Random
{
public:
int rand_number;
float rand_dec;
};
int main(){
Random random;
random.rand_number=1;
random.rand_dec=2.1;
std::variant<Random,std::string> input{ "Hello" };
auto PrintVisitor = [](const auto& t) { std::cout << t << "\n"; };
std::visit(PrintVisitor,input);}
所以,我想知道使用类时如何访问该值,因为使用默认数据类型没有问题吗?
错误太大,因此我要发布重要的部分
19 52 C:\Users\Khusi\Documents\CPP\test2.cpp [Error] no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'const Random')
解决方法
在访问变量input
时,该变量仅接受两种类型:类Random
和std::string
,函数PrintVisitor
对变量的每个成员执行一个操作: std::cout << t << "\n";
。因此,类std :: string具有重载输出运算符,但您的类没有。您需要实现它。
有一个重载输出运算符的示例:https://docs.microsoft.com/en-us/cpp/standard-library/overloading-the-output-operator-for-your-own-classes?view=vs-2019
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。