Return std::variant 来自函数
Return std::variant from a function
我正在尝试从我的函数中 return 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};
我进行了一些谷歌搜索,但找不到解决方案。我该如何修复错误。
谢谢
ret = {1,2,3,4,5,6,7,8,9,0};
这是模棱两可的。您有 long
和 char
的变体,但它们是 int
文字。它们应该转换成什么? long
和 char
?
如果您希望它们是 long
,请改用 long
文字:
ret = { 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 0L };
我正在尝试从我的函数中 return 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};
我进行了一些谷歌搜索,但找不到解决方案。我该如何修复错误。
谢谢
ret = {1,2,3,4,5,6,7,8,9,0};
这是模棱两可的。您有 long
和 char
的变体,但它们是 int
文字。它们应该转换成什么? long
和 char
?
如果您希望它们是 long
,请改用 long
文字:
ret = { 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 0L };