LoginSignup
0
0

stringが使えないと思ったらインクルードパスの設定が間違ってた話

Posted at

環境

Macです

何があったか

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    cin >> s;
    cout << s << '\n';
}

(例えば)これを書いて、以下のエラーが出ました。

error: aggregate 'std::string s' has incomplete type and cannot be defined
   5 |                 string s; cin >> s;

修正方法

これ、実は、bits/stdc++.hの中にあったstringatcoder/stringが競合していたことによるエラーです。

まず、open ~を実行し、Finderで隠しファイルも表示させます。そして、.zshrcを修正します。
最初、自分は以下のようになってました。

export PATH="/usr/local/sbin:$PATH"
# Python3
export PATH="/usr/local/bin:$PATH"
alias python="python3"
alias pip="pip3"
# ac-library
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/ 非 公 開 /includes/"
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/ 非 公 開 /includes/atcoder/"
# boost
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/opt/homebrew/opt/boost@1.83/include/"
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/opt/homebrew/opt/boost@1.83/include/boost/"

これの

export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/ 非 公 開 /includes/atcoder/"

の行を削除します。この行があったことにより、atcoder内のヘッダ(dsu.hppなど)がatcoder/をつけずにインクルードできるようになっていました。さらに、CPLUS_INCLUDE_PATH内の優先順位がstringよりatcoder/stringの方が先に見つかるようになっていたので、bits/stdc++.hをインクルードしたときにstringではなくatcoder/stringがインクルードされていました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0