首页 > 解决方案 > C++ 编译错误:错误:“尝试”之前的预期主表达式

问题描述

错误:

/home/mike/Documents/PROJECTS/BUN/blib/bun/impl/DbBackend.hpp:61:21: error: expected primary-expression before ‘try’
                     try {
                     ^~~
/home/mike/Documents/PROJECTS/BUN/blib/bun/impl/DbBackend.hpp:67:21: error: expected ‘,’ or ‘;’ before ‘catch’
                     catch (std::exception const &except) {
                     ^~~~~
In file included from blib/bun/bun.hpp:3:0,
                 from main.cpp:12:

部分代码:

                bool connect(std::string const &in_params) {
                    const auto backend_factory =
#ifdef BUN_SQLITE
                    soci::sqlite3;
#elif defined(BUN_POSTGRES)
                    soci::postgresql;
#elif defined(BUN_MYSQL)
                    soci::mysql;
#endif
                    try {
                         if (!_ok) {
                                          _sql_session.open(backend_factory, in_params);
                                          _ok = true;
                                   }
                    }
                    catch (std::exception const &except) {
                                     l().error(except.what());
                        _ok = false;
                    }
                              return _ok;
                }

                soci::session &session() {
                    return _sql_session;
                }
            };

生成文件:

LDFLAGS := -L/usr/local/lib   \
-I/home/mike/Documents/PROJECTS/BUN/third_party/unqlite -I/home/mike/Documents/PROJECTS/BUN -I/home/mike/Documents/PROJECTS/BUN/third_party
# LDLIBS :=  -lpthread -lresolv
EXECUTABLE := main
# CXXFLAGS=-g -std=c++11 -Wall
CXXFLAGS=-g -std=c++17 -Wall

all: $(EXECUTABLE)

clean:
    rm -f $(EXECUTABLE) *.o

我正在尝试使用 Bun orm。在我的程序中,我只包含了 bun.hpp 文件。在尝试之前我不明白编译器有什么问题?也许是因为#ifdef上面的那个运营商 try ?它还说它预期,;在捕获之前......

我正在尝试 ubuntu 18.04

标签: c++

解决方案


您的编译行没有定义任何选项(除非它们来自文件内部或另一个标题),因此您得到:

bool connect(std::string const &in_params) {
                const auto backend_factory =
                try {

要确认您可以在 g++ 行中添加“-E”以在预处理器之后获取源代码。

另一种可能性是您定义了多个。你总是可以#undef其中 2 个和#define最后一个来查看它是否以这种方式编译(就像测试一样)。


推荐阅读