Post

vscode CPH Judge C++20 컴파일 오류

vscode CPH Judge C++20 컴파일 오류

vscode에서 Competitive Companion과 CPH Judge를 사용해 알고리즘을 푸는데 C++의 map 문법 중 C++20버전부터 사용 가능한 contains를 사용했는데 컴파일이 안되었다. 기존 C++17로 설정되어있었다. 이를 고치기 위한 여러 트러블슈팅

.vscode에서 c+cpp_properies.json수정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:/msys64/ucrt64/bin/g++.exe",
            "cStandard": "c17",
            "cppStandard": "c++20",
            "intelliSenseMode": "windows-gcc-x64",
            "compilerArgs": ["-std=c++20"]
        }
    ],
    "version": 4
}

이후 settings.json도 수정

1
2
3
4
5
6
7
8
9
10
{
    "cph.general.saveLocation": "",
    "cph.language.cpp.Command": "g++",
    "cph.language.cpp.SubmissionCompiler": "GNU G++20 13.2 (64 bit, winlibs)",
    "C_Cpp.default.cppStandard": "c++20",
    "C_Cpp.default.compilerPath": "C:/msys64/ucrt64/bin/g++.exe",
    "files.associations": {
        "iostream": "cpp"
    } // Windows용
}

tasks.json도 수정

1
2
3
4
5
6
7
8
9
10
{
    "cph.general.saveLocation": "",
    "cph.language.cpp.Command": "g++",
    "cph.language.cpp.SubmissionCompiler": "GNU G++20 13.2 (64 bit, winlibs)",
    "C_Cpp.default.cppStandard": "c++20",
    "C_Cpp.default.compilerPath": "C:/msys64/ucrt64/bin/g++.exe",
    "files.associations": {
        "iostream": "cpp"
    } // Windows용
}

근데 여전히 해결이 안되었고

1
2
3
4
5
Exit code: 1 Errors while compiling:
c:\Users\nowal\Desktop\cppalgorithm\BOJ\피보나치수_6.cpp: In function 'long long int getFibo(long long int)':
c:\Users\nowal\Desktop\cppalgorithm\BOJ\피보나치수_6.cpp:21:14: error: 'class std::map<long long int, long long int>' has no member named 'contains'
   21 |     if (fibo.contains(n)) return fibo[n];
      |              ^~~~~~~~

이런 에러가 발생했는데 이는 컴파일이 여전히 C++20으로 안되는것이었다.

이에 extension에서 설정을 확인해봤다. 문제는 이 부분이었다. 여기서 Language > Cpp : Args에서 아무것도 없어서 계속 디폴트가 반영되었던 것 같다. 그래서 다음과 같이 직접 C++20으로 작성해주니 반영되었다.

PS

번외로 vscode 계정을 Settings sync해뒀더니 macOS에서 다른 부분이 있어서 sync를 꺼두었다. macOS에서는 Cph > Language < Cpp: Command를 /opt/homebrew/bin/g++-14 로 바꾸어야한다!

참고자료

Integrating CF-Tools with Visual Studio Code CPH Judge extension, making submission more convenient.

This post is licensed under CC BY 4.0 by the author.