error: expected expression when using lambda expression in C++
error: expected expression when using lambda expression in C++
使用 lambda 表达式时,我的编译器显示错误。这是实现(其中 name
是 std::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
使用 lambda 表达式时,我的编译器显示错误。这是实现(其中 name
是 std::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