error: expected expression when using lambda expression in C++

error: expected expression when using lambda expression in C++

使用 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

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

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;
}

您在 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