3

私はプログラミングを始めたばかりで、Bjarne の本 C++11 バージョンで C++ を独学しています。OS X El Cap にインストールされた Xcode コマンドライン ツールで Coderunner 2 を使用しています。初期化子リストを使用して変数を作成すると、次のコードでエラーが発生します。私の考えでは、Coderunner は c++11 を実行していません。私は完全な初心者で、自分の人生のために何をすべきかわかりません。有益なアドバイスをいただければ幸いです。前もって感謝します。

clang バージョン: Apple LLVM バージョン 7.0.0 (clang-700.0.72)

    #include <iostream>
    #include <complex>
    #include <vector>
    using namespace std;

    int main(int argc, char** argv) 
    {
        double d1 = 2.3; //Expressing initialization using =
        double d2{2.3}; //Expressing initialization using curly-brace-delimited lists

        complex<double> z = 1;
        complex<double> z2{d1,d2};
        complex<double> z3 = {1,2};

        vector<int> v{1,2,3,4,5,6};

        return 0;
    }

次のエラーが表示されます。

    2.2.2.2.cpp:9:11: error: expected ';' at end of declaration
    double d2{2.3}; //Expressing initialization using curly-brace-delimited lists
             ^
             ;
    2.2.2.2.cpp:12:20: error: expected ';' at end of declaration
    complex<double> z2{d1,d2};
                      ^
                      ;
    2.2.2.2.cpp:13:18: error: non-aggregate type 'complex<double>' cannot be initialized with an initializer list
    complex<double> z3 = {1,2};
                    ^    ~~~~~
    2.2.2.2.cpp:15:15: error: expected ';' at end of declaration
    vector<int> v{1,2,3,4,5,6};
                 ^
                 ;
    4 errors generated.
4

3 に答える 3

5

C++11 はデフォルトではありません。clang++ を使用して C++11 でコンパイルするには、以下が必要です。

-std=c++11 -stdlib=libc++

Coderunner 2 では、上記を含めて、c++ に関連するスクリプトを変更する必要があります。[Coderunner] > [Preferences] に移動し、[Language] で [C++] を選択して [Edit Script] をクリックします。

Coderunner - 設定

Coderunner に「compile.sh」ファイルが表示されます。行 78 を変更します。

xcrun clang++ -x c++ -std=c++11 -stdlib=libc++ -lc++ -o "$out" "$

行 85 を変更します。

"$CR_DEVELOPER_DIR/bin/clang" -x c++ -std=c++11 -stdlib=libc++ -lc++ -o "$out" "${files[@]}" "-I$CR_DEVELOPER_DIR/include" "-I$CR_DEVELOPER_DIR/lib/clang/6.0/include" "-I$CR_DEVELOPER_DIR/include/c++/v1" "${@:1}"

それが役立つことを願っています! 正しい方向に向けてくれたセルジュ・バレスタに感謝します。

于 2015-10-07T19:14:39.933 に答える
1

コンパイラが C++11 モードを使用していないことが問題であることを確認できました。Clang 3.4.1を使用せず-std=c++11にコードをコンパイルすると、あなたとまったく同じ 4 つのエラーが発生しますが、このコマンド ラインは次のとおりです。

 c++ -stc=c++11 -c -Wall -pedantic foo.cpp

次の警告のみが表示されます。

警告: 未使用の変数 'z' [-Wunused-variable]
複素数 z = 1;

于 2015-10-07T13:40:23.630 に答える