VS2019 C++项目报C1075 '{': no matching token found 问题咨询
C1075报错问题定位与解决
直接问题根因
你贴出的WriteBody函数代码本身就存在括号不匹配问题:asio::async_write的第三个入参是lambda表达式,lambda闭合大括号之后,缺少了async_write函数调用对应的右小括号),这是触发报错的直接原因。
报错位置上移是MSVC编译器的典型特征:编译器扫描代码时会累计括号计数,直到计数不匹配时才抛出报错,所以报错指向的位置往往不是真正缺括号的位置。你注释下层函数后,编译器会在上层代码位置才发现括号计数异常,因此报错位置会上移。
通用定位步骤
- 优先用Visual Studio自带的括号匹配功能:将光标移到括号左侧,IDE会自动高亮对应的配对括号,如果没有高亮项,说明当前括号无匹配,从报错文件头部开始逐段排查即可
- 检查所有宏定义:宏定义内部未闭合的括号、末尾漏写的分号,展开后会污染后续所有代码,是这类连锁语法报错的常见诱因
- 排查引入的头文件:如果被include的头文件末尾存在未闭合的类/函数括号、类定义末尾漏写分号,也会导致当前文件出现括号匹配报错,可以逐个注释include语句后编译验证
- 分段注释代码排查:每次注释一段代码后重新编译,报错消失则说明问题出在刚注释的代码段内,可快速缩小排查范围
修正后的代码示例
void WriteBody() { asio::async_write(m_socket, asio::buffer(&qMessagesOut.front().body.data(), m_qMessagesOut.front().body.size()), [this](std::error_code ec, std::size_t length) { if (!ec) { m_qMessagesOut.pop_front(); if (!m_qMessagesOut.empty()) WriteHeader(); } else { std::cout << "[" << id << "] Write Body Fail.\n"; m_socket.close(); } }); // 补全async_write函数调用的右小括号 }
内容的提问来源于stack exchange,提问作者John Milaro
相关产品推荐
相关产品推荐

