C++17 std::optional 错误:'auto' 之前的预期主表达式

C++17 std::optional error: expected primary-expression before #39;auto#39;(C++17 std::optional 错误:auto 之前的预期主表达式)
本文介绍了C++17 std::optional 错误:'auto' 之前的预期主表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在试验 C++17 特性 std::optional

I was experimenting with C++17 feature std::optional

可选返回类型为std::optional>.我叫sum_pair 函数在 print_answer 函数中,想要一个可选的打印.

The optional return type is std::optional<std::pair<int, int>>. I call the sum_pair function in print_answer function and wanted a optional print.

print_answer 函数中,我想检查所需的对是否包含要显示的内容.就像在下面给出的例子中一样:可选返回工厂函数可用作 while 和 if 的条件

In print_answer function I wanted to check whether the required pair holds something to show. like in the example given in: optional-returning factory functions are usable as conditions of while and if

以下是代码:这里有错误

#include <iostream>
#include <vector>
#include <unordered_map>
#include <optional>

typedef std::optional<std::pair<int, int>> returnType;

// following algorithum works fine: just to show, 
// how I have used the std::optional
returnType sum_pair(const std::vector<int>& vec, const int sum)
{
    std::unordered_map<int, int> compIndexMap;

    int index = 0;
    for(const int& ele: vec)
    {
        if(auto check = compIndexMap.find(sum - ele); check != compIndexMap.cend())
            return returnType{std::make_pair(check->second, index)};

        compIndexMap.emplace(sum - ele, index);
        ++index;
    }
    return std::nullopt;
}

// problem is here:
void print_answer(const std::vector<int>& vec, const int sum)
{
    // if I uncomment the if-else, everything works
    /*if*/(auto Pair = sum_pair(vec, sum) )?  
        std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl: //;
    //else
        std::cout << "Nothing found!
";
}
int main()
{
    std::vector<int> vec0{ 1,3,2,8 };
    const int sum = 8;
    print_answer(vec0, sum);
    return 0;
}

当我使用以下格式的 if-else 语句时

When I use the if-else statement in the following format

(condion) ? print something: print something else;

我收到以下两个错误.(使用 GCC 7.1)

I get the following two errors. (used GCC 7.1)

||=== Build: Debug in MyTestProgram (compiler: GNU GCC Compiler) ===|
|25|error: expected primary-expression before 'auto'|
|25|error: expected ')' before 'auto'|

谁能解释一下,为什么我需要使用 if-else,而不是 "operator ?" ?

Can somebody explain, why I need to use if-else, but not with "operator ?" ?

推荐答案

if(auto Pair = sum_pair(vec, sum) )
    std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl;
else
    std::cout << "Nothing found!
";

这是有效的 C++.您可以在 if 子句的开始条件中放置声明.

this is valid C++. You are allowed to put a declaration in the opening condition of an if clause.

(auto Pair = sum_pair(vec, sum) )?
    std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl
:
    std::cout << "Nothing found!
";

这不是有效的 C++.声明不是表达式.有些地方允许使用表达式,但不允许使用声明.? 的左侧,三元运算符,就是其中之一.

this is not valid C++. Declarations are not expressions. There are places where expressions are allowed, but declararions are not. The left hand side of ?, the trinary operator, is one of them.

这篇关于C++17 std::optional 错误:'auto' 之前的预期主表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

What do compilers do with compile-time branching?(编译器如何处理编译时分支?)
Can I use if (pointer) instead of if (pointer != NULL)?(我可以使用 if (pointer) 而不是 if (pointer != NULL) 吗?)
Checking for NULL pointer in C/C++(在 C/C++ 中检查空指针)
Math-like chaining of the comparison operator - as in, quot;if ( (5lt;jlt;=1) )quot;(比较运算符的数学式链接-如“if((5<j<=1)))
Difference between quot;if constexpr()quot; Vs quot;if()quot;(“if constexpr()之间的区别与“if())
C++, variable declaration in #39;if#39; expression(C++,if 表达式中的变量声明)