環境
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
の中にあったstring
とatcoder/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がインクルードされていました。