【问题标题】:error: expected expression when using lambda expression in C++错误:在 C++ 中使用 lambda 表达式时的预期表达式
【发布时间】:2016-06-02 23:04:01
【问题描述】:

当使用 lambda 表达式时,我的编译器会显示一个错误。这是实现(其中namestd::string&):

auto expression = [name](const Item* x) -> bool { return x->get_name() == name; };

这是错误:

items/container.cpp:20:27: error: expected expression
    auto expression = [name](const Item* x) -> bool { return x->get_name() == name; };

这些是我的编译器标志:

CFLAGS=$(-std=c++11 -stdlib=libc++  -g -Wall -Werror -Wextra -I.)

到目前为止,我使用的所有其他 C++11 功能都有效。我使用的是 MacOS 10.11.3。

>> clang --version
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix

>> clang++ --version
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix

不幸的是,这对我没有帮助:Clang 3.1 and C++11 support status

更新:按照下面的 cmets 建议创建了一个最小示例后,它起作用了!问题一定出在我的makefile中。这重现了错误:

CC=clang++
CFLAGS=$(-stdlib=libc++ -std=c++11 -g -Wall -Werror -Wextra -I.)

all: main

main: main.o
    $(CC) $(CFLAGS) -o main *.o

main.o: main.cpp
    $(CC) $(CFLAGS) -c main.cpp

我的 main.cpp 文件:

#include <iostream>
#include <string>

int main() {
    auto lambda = [](const std::string& str) { return str == "whatever"; };
    std::string s1 = "something else";
    std::string s2 = "whatever";
    std::cout << "should be false: " << lambda(s1) << std::endl;
    std::cout << "should be true: " << lambda(s2) << std::endl;
    return 0;
}

【问题讨论】:

  • 你能给出一个最小的完整例子吗?
  • 我想,这种或另一种方式,该文件实际上并没有使用您的 CFLAGS 进行编译,因为如果您离开 -std=c++11,这就是您会得到的错误。您是否在该特定文件中尝试过另一个 C++11 功能?有同样的问题吗?
  • 是的,我的 makefile 似乎有问题!我已经更新了上面的帖子。

标签: macos c++11 clang clang++


【解决方案1】:

您在 makefile 中误用了 $ 符号。它用于替换变量,因此$(-stdlib=libc++ ...) 会建议您有一个名称以 -stdlib=... 开头的变量... (我很惊讶这没有给您错误)

如果您不想要替换而只想要文字内容,请将其写在 = 符号之后,不要转义:

CC=clang++
CFLAGS=-stdlib=libc++ -std=c++11 -g -Wall -Werror -Wextra -I.

all: main

main: main.o
    $(CC) $(CFLAGS) -o main *.o

main.o: main.cpp
    $(CC) $(CFLAGS) -c main.cpp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2019-07-25
    相关资源
    最近更新 更多