这是因为使用的库文件和编译器使用的协程ABI不匹配导致的问题。解决方法是将编译器的协程ABI与库文件使用的协程ABI保持一致。
可以在项目的属性页中找到“C/C++” -> “代码生成” ->“协程”选项,'协程完成程序二进制接口(ABI)”设置为与使用的库文件相同的值。
例如,如果使用的库文件使用的是“CoroutinesTS”,则需要将编译器的协程ABI设置为“/await:
//main.cpp
#include
struct Generator {
struct promise_type {
int current_value;
std::experimental::suspend_always yield_value(int value) {
this->current_value = value;
return {};
}
std::experimental::suspend_never initial_suspend() { return {}; }
std::experimental::suspend_always final_suspend() { return {}; }
Generator get_return_object() { return Generator{this}; }
void return_void() {}
};
Generator(promise_type* p) : p(p) {}
~Generator() {}
// Iteration
void operator++() { p->current_value++; }
int operator*() const { return p->current_value; }
bool operator!=(const Generator&) const { return true; }
std::experimental::coroutine_handle
Generator range(int begin, int end) {
for(int i=begin; i int main() {
for(int i : range(0, 4))
std::cout << i << " ";
std::cout