我创建了一个类,并将该类用作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:UsersKhusiDocumentsCPPtest2.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://learn.microsoft.com/en-us/cpp/standard-library/overloading-the-output-operator-for-your-own-classes?view=vs-2019年