【问题标题】:Return std::variant from a function从函数返回 std::variant
【发布时间】:2019-11-15 10:21:09
【问题描述】:

我试图从我的函数中返回 std::vector<long>std::vector<char>,但编译器抱怨这一行 ret = {1,2,3,4,5,6,7,8,9,0};

class CharFactory {
    public:
        static std::vector<std::variant<long,char>> getChars(TokenType t){
            std::vector<std::variant<long,char>> ret;
            switch (t) {
                case TokenType::BINOP:
                    ret = {'+','-','*','/'};
                    break;
                case TokenType::NUMBER:
                    ret = {1,2,3,4,5,6,7,8,9,0};
                    break;
                case TokenType::LP:
                    ret = {'('};
                    break;
                case TokenType::RP:
                    ret = {')'};
                    break;
                default:
                    ret = {};
            }
            return ret;
        }
};

我使用 Xcode 11.2.1 和 Apple clang 版本 11.0.0 (clang-1100.0.33.12)。我收到的错误消息是

c.cpp:28:25: error: no viable overloaded '='
                    ret = {1,2,3,4,5,6,7,8,9,0};

我进行了一些谷歌搜索,但找不到解决方案。我该如何解决这个错误。

谢谢

【问题讨论】:

    标签: c++ xcode clang clang++ variant


    【解决方案1】:
    ret = {1,2,3,4,5,6,7,8,9,0};
    

    这是模棱两可的。您有 longchar 的变体,但它们是 int 文字。它们应该转换成什么? longchar?

    如果您希望它们是 long,请使用 long 文字代替:

    ret = { 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 0L };
    

    【讨论】:

    • 谢谢!在这种情况下,我希望编译器将 int 解释为 long,但显然我错了。
    猜你喜欢
    • 2022-10-21
    • 1970-01-01
    • 2023-03-19
    • 2023-03-27
    • 1970-01-01
    • 2015-01-18
    • 2011-08-16
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多