Clion IDE C++ 语法错误误报

Clion IDE C++ false positive on syntax error

我正在使用 Clion 作为 IDE

我刚刚将我的软呢帽从 24 更新到 25 以便使用 C++17, 但不幸的是,现在 CLion (v 2017.2.3) 显示 OS 升级

之前不存在的代码错误

此处显示的 "error" 使用模板参数作为 std::optional

的模板

此处使用 std::make_shared 显示了 "error",表示我使用了太多参数(显然我应该需要 2 个),而实际构造函数采用 3 个参数。我提醒代码编译并工作

我的 CMake 文件(不知道是否有帮助)

Cmake_minimum_required(VERSION 3.3)

project(FreeSouls CXX)

set(CMAKE_CXX_COMPILER /usr/bin/g++)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lprotobuf -lboost_timer -lboost_system -lboost_thread")

set(CMAKE_CXX_STANDARD 17)

if ( UNIX )
    set(CMAKE_CXX_FLAGS
            "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Wextra -Wno-deprecated-declarations")
    message( STATUS Set Warnings flag : ${CMAKE_CXX_FLAGS})
endif()

enable_testing()

add_subdirectory( Protobuff )

include_directories(
        cmake-build-debug/Protobuff
        FySMQ/include/queue
        FySMQ/include/bus
        FySMemoryManager/include
        Server/include/gateway
        Server/include/network
        Server/include/babble
        Server/include/game Utils/src)

set(SOURCE_FILES_MM)

set(SOURCE_PROTOBUF
        cmake-build-debug/Protobuff/FySBabbleMessage.pb.cc
        cmake-build-debug/Protobuff/FySGtwMessage.pb.cc
        cmake-build-debug/Protobuff/FySLoginMessage.pb.cc
        cmake-build-debug/Protobuff/FySAuthenticationResponse.pb.cc
)

set(SOURCE_FILES_MQ
        FySMQ/include/queue/LockFreeQueue.hh
        FySMQ/include/queue/QueueContainer.hh
        FySMQ/include/queue/LockingQueue.hh
        FySMQ/include/bus/BusListener.hh
        FySMQ/include/bus/FysBus.hh)

set(SOURCE_FILES_SRV
        Server/src/gateway/Gateway.cpp
        Server/include/gateway/Gateway.hh
        Server/src/gateway/Context.cpp
        Server/include/gateway/Context.hh
        Server/src/network/SessionManager.cpp
        Server/include/network/SessionManager.hh
        Server/src/babble/Babble.cpp
        Server/include/babble/Babble.hh
        Server/src/babble/BabbleChannel.cpp
        Server/include/babble/BabbleChannel.hh
        Server/src/network/TcpConnection.cpp
        Server/include/network/TcpConnection.hh
        Server/src/gateway/GameServerInstance.cpp
        Server/include/gateway/GameServerInstance.hh
        Server/src/gateway/Authenticator.cpp
        Server/include/gateway/Authenticator.hh
)

set(SOURCE_FILES_UTILS Utils/src/CheckVars.hh Utils/src/TokenGenerator.cpp Utils/src/TokenGenerator.hh)

set(SOURCE_FILES_ALL
        ${SOURCE_PROTOBUF}
        ${SOURCE_FILES_UTILS}
        ${SOURCE_FILES_MQ}
        ${SOURCE_FILES_MM}
        ${SOURCE_FILES_SRV})

set(SOURCE_FILES
        ${SOURCE_FILES_ALL}
        Server/src/main.cpp)

set(SOURCE_FILES_TEST
        ${SOURCE_FILES_ALL}
        FySMQ/test/TestUnitMQ.cpp
        Utils/test/TestCheckVar.cpp
        FySMQ/test/FysBusTest.hh)

### Server ###
add_executable(FreeSouls ${SOURCE_FILES})
target_link_libraries(FreeSouls proto )

# link against dynamic libraries
add_definitions(-DBOOST_ALL_DYN_LINK)

## Test executable
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
add_executable(UnitTests ${SOURCE_FILES_TEST})
target_link_libraries(UnitTests ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
add_test(UnitTests UnitTests)

您遇到过这种错误吗?我该如何解决?

我在这里找到了一个关于类似问题的 post Linux CLion can't resolve namespace member 但看起来这是 Clion 的一个错误,新版本修复了它, 知道我在 fedora 24 上使用的是完全相同的版本并且在升级之前它工作正常,我不知道它是否相同。

正如 Chris 所说,这是 CLion 解析器的错误。 2017.3版本的发布解决了这些问题。