質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1107閲覧

【error: expected expression】 Sublime Text上で二次元配列に配列をpush_backするとエラーが出る。

kay_ventris4

総合スコア269

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/04/09 16:53

編集2022/04/09 22:24

C++

1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 vector<vector<int> > li; 6 li.push_back({1, 2}); 7}

というファイルを、Sublime Text(Version 3.2.2, Build 3211)上でコンパイルすると、以下のようなエラーが出力されました:

/Users/***/Desktop/***/main.cpp:248:18: error: expected expression li.push_back({1, 2}); ^ 1 error generated. [Finished in 1.9s with exit code 1] [shell_cmd: g++ "/Users/***/Desktop/***/main.cpp" -o "/Users/***/Desktop/***/main" && "/Users/***/Desktop/***/main"] [dir: /Users/***/Desktop/***] [path: /usr/bin:/bin:/usr/sbin:/sbin]

一方、これをCodeforcesが提供しているカスタムテストで言語はGNU++17 (7.3.0)で実行したところ、エラーは何も出力されませんでした。

わかる範囲で、ターミナルでc++ -vと実行したところ得られた情報は以下です:

Apple clang version 12.0.0 (clang-1200.0.26.2) Target: x86_64-apple-darwin21.3.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin

(yaito3014様のご指摘により追記)g++ -vと実行した場合は以下です:

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1 Apple clang version 12.0.0 (clang-1200.0.26.2) Target: x86_64-apple-darwin21.3.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin

上のようなコンパイルエラーが出力されるのはどのようなことが起因しているのでしょうか。初学者につき何が足りていないのか現段階では不明なところがあり、不足している情報がありましたらご指摘ください。素人質問にて恐縮ですが、お力添え頂ける箇所が御座いましたらよろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/04/09 19:24

c++ のご質問であれば c のタグは外していただけますか。
kay_ventris4

2022/04/09 19:25

失礼いたしました。修正しました。
yaito3014

2022/04/09 22:19

Sublime Text 上の出力を見るに呼び出されているのは c++ ではなく g++ であるように見えますが、念の為そちらに対しても -v を渡してみては如何でしょうか?
kay_ventris4

2022/04/09 22:22

ご指摘ありがとう御座います。質問の方に反映致しました。
hoshi-takanori

2022/04/10 01:20 編集

Mac では gcc や g++ という名前でも Apple clang が呼び出されて、brew で入れた gcc や g++ は gcc-11 や g++-11 (11 は gcc のバージョン) みたいな名前になるという罠があります。ってか、Apple clang の場合、#include <bits/stdc++.h> の時点で非標準ヘッダーのためエラーになるような…。 また、Apple clang では相変わらず古い C++ がデフォルトのようで、#include <bits/stdc++.h> を #include <vector> に書き換えて c++ --std=c++11 でコンパイルしたら通りました。
kay_ventris4

2022/04/10 11:56

ありがとう御座います。勉強になりました。
guest

回答1

0

ベストアンサー

まずエラーそのものの原因についてですが、波括弧によって std::vector を初期化するリスト初期化が C++11 以降の言語機能であり、 C++03 以前としてコンパイルするとエラーとなります。

本件においては Sublime Text が呼び出している /usr/bin/ 以下にある GCC のバージョンが古く、デフォルトが C++11 ではないために当該のエラーが発生しているものと思われます。
例えば macOS のターミナルから g++ を使って同一のソースコードをコンパイルした場合には XCode に付属する比較的新しいコンパイラが使われ、コンパイルは成功すると思います。

解決策としては、 Sublime Text において /Library/Developer/CommandLineTools/usr/bin/ 以下にある XCode 由来の g++ が検索されるように設定するか、 Homebrew などで /usr/bin/ 以下の GCC をアップデートするかになると思います。

投稿2022/04/09 23:58

yaito3014

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kay_ventris4

2022/04/10 00:18

ご回答ありがとう御座います。 追加で一つお伺いしたいのですが、 前者の「XCode 由来の g++ が検索されるように設定する」とはもう少し具体的にどのようなことをすれば良いのでしょうか。お時間いただき恐縮ですが、何卒よろしくお願い申し上げます。
yaito3014

2022/04/10 00:52

"cmd" オプションにある "g++" を "/Library/Developer/CommandLineTools/usr/bin/g++" に置き換えて明示的に呼び出すようにするか、 "env" オプションから "PATH" に "/Library/Developer/CommandLineTools/usr/bin" を設定するなどになると思います。 https://www.sublimetext.com/docs/build_systems.html#options
kay_ventris4

2022/04/10 11:55

ご丁寧にありがとう御座います。参考にさせて頂き、再度自分で調査してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問