C ++编译错误:错误:“尝试”之前的预期主表达式

时间:2020-02-18 21:39:18

标签: c++

错误:

      |          Working tree          |           Object Store
------|--------------------------------|--------------------------------
 #ths |  Regex 1      |  Regex 2       |   Regex 1      |   Regex 2
------|---------------|----------------|----------------|---------------
  32  |  3.29s ± 0.21 |   4.30s ± 0.01 |   6.30s ± 0.01 |   7.30s ± 0.02
  16  |  3.19s ± 0.20 |   4.14s ± 0.02 |   5.91s ± 0.01 |   6.83s ± 0.01
   8  |  2.90s ± 0.04 |   3.82s ± 0.20 |   5.70s ± 0.02 |   6.53s ± 0.01
   4  |  2.84s ± 0.02 |   3.77s ± 0.20 |   6.19s ± 0.02 |   7.18s ± 0.02
   2  |  3.73s ± 0.21 |   5.57s ± 0.02 |   9.28s ± 0.01 |  11.22s ± 0.01
   1  |  7.48s ± 0.02 |  11.36s ± 0.03 |  17.75s ± 0.01 |  21.87s ± 0.08

部分代码:

/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:

Makefile:

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

我正在尝试使用Bun orm。在我的程序中,我仅包含bun.hpp文件。我不明白尝试之前编译器不行吗?也许是因为尝试以上的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 运算符?此外,它还表示希望在抓到之前#ifdef,……

我正在尝试使用Ubuntu 18.04

2 个答案:

答案 0 :(得分:4)

您的编译行未定义任何选项(除非它们来自文件内部或其他标头),因此您将获得:

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

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

另一种可能性是您要定义多个。 您总是可以#undef其中2个和#define最后一个来查看其是否以此方式编译(仅作为测试)。

答案 1 :(得分:0)

尝试删除所有#def宏并仅保留其中一个并检查其是否可以编译,例如const UsageDescription如果可以编译,则意味着您没有在代码中定义这3个def之一。