问题描述
我创建了一个类,并将该类用作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