識別子が必要です

foodiecookies

配列の絶対和を見つけようとしていました。

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

int getAbsSum(vector<int> arr) {
    int result = 0;
    for (int i = 0; i < arr.size(); i++)
    {
        result += abs(arr[i]);
    }

    return result;
}

int main() {
    cout << getAbsSum([3, 2, -3, -4]);
    return 0;
}

しかし、メイン関数に「識別子が必要です」というエラーが表示されました。このように、配列の前に型名を追加してみました

 cout << getAbsSum(int [3, 2, -3, -4]);

しかし、それは機能しませんでした。

アルジョナイス

の意味は[ ]、あなたがあなたの例で伝えるものはありません。[]は配列インデックスを示すために使用され、1つの引数のみをサポートします。したがって、3, 2, -3, -4このコンテキストでの式は、3を評価し、次に2を評価し、次に-3を評価し、次に-4を評価し、-4を評価した結果を返すことを意味します。見る

https://en.cppreference.com/w/cpp/language/operator_other

式のため32そして-3副作用がないあなただけ書いたかのように、ここでの結果は同じです-4識別子エラーを予期することに関して、operator [ ]はその前に変数を必要とするのでarr[1]、配列(またはコンテナ)arrの2番目のオブジェクトを返すことを意味します。解決策は、統一初期化の形式であるリスト初期化に正しい構文を使用することです(集約用の集約初期化と混同しないでください。ベクトルは集約ではありません)。

cout << getAbsSum({3, 2, -3, -4});

また、using namespace std;グローバルワークスペースでは使用せず、スコープ内、つまり効果がスコープ内で制限されている関数内でのみ使用することをお勧めします。この関数の最新バージョンは、次のように書き直すことができます。

#include <iostream>
#include <vector>
#include <chrono>

template <typename E = int,
    template <typename> typename T = std::vector>
E getAbsSum(T<E> const& arr){ 
    E result {};
    for (E element : arr)
    {
        result += abs(element);
    }
    return result;
}

int main() {
    using namespace std;
    using namespace std::literals;
    cout << getAbsSum({3, 2, -3, -4}) << '\n';
    cout << getAbsSum(vector<double>{2.3, 4.5, 6}) << '\n';
    cout << getAbsSum(vector<chrono::seconds>{10s, 1min}).count() << '\n';
    return 0;
}

このバージョンは、任意の算術型と任意のコンテナーをサポートします。

@foodiecookiesへの応答:

(1)ここで、この行E result {};は、Eのデフォルトコンストラクターが呼び出されることを意味します。を使用した場合、のE result = 0初期化でエラーが発生しますがchrono::seconds、を使用した場合E result、算術型は初期化されません。これは未定義の動作です。E result {}複合型ではデフォルトのコンストラクターを呼び出し、基本型では0または同等の値(0.f、0.、false、...)を呼び出します。

(2)for (auto var : container)は範囲ベースのループです。https://en.cppreference.com/w/cpp/language/range-forを参照してください。より安全で読みやすいと考えられています。for(;;)コンテナ内のすべての要素を反復処理しない場合は、古いものを使用してください

(ボーナス)引数依存ルックアップのおかげで関数のabs(element)正しいバージョンを見つけるhttps://en.cppreference.com/w/cpp/language/adlabs

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java:識別子が必要です

分類Dev

<識別子>が必要です、arrayList

分類Dev

「識別子が必要です」エラー?

分類Dev

Blazorの子RenderTemplate識別子が必要です

分類Dev

ArrayListを宣言する方法は?(識別子が必要です)

分類Dev

Android:R.java:エラー<識別子>が必要です

分類Dev

Android:R.java:エラー<識別子>が必要です

分類Dev

CS1001Webサイト識別子が必要です

分類Dev

React svg xmlns:xlink識別子が必要です

分類Dev

ASP.NETWebFormsの「識別子が必要です」エラー

分類Dev

テーブルには複数の識別子が必要です

分類Dev

最終識別子が必要なのはなぜですか?

分類Dev

innoセットアップ識別子が必要です

分類Dev

エラー:「_ Bool」の前に識別子が必要です

分類Dev

NVCC unistd.h(792):エラー:識別子が必要です

分類Dev

Scalaエラー:識別子が必要ですが、 ')'が見つかりました

分類Dev

Scala-識別子が必要ですが、「=>」が見つかりました

分類Dev

「==」のC ++で「エラー:識別子が必要です」を受信する

分類Dev

Flutter Dart「識別子が必要です」&「「)」が見つかりました」

分類Dev

パッケージが存在しません。<識別子>が必要です

分類Dev

Java / C#で国際識別子を使用する必要がありますか?

分類Dev

トークン「クラス」の構文エラー、識別子が必要です

分類Dev

エラー:「テンプレート」の前に識別子が必要です

分類Dev

TableViewセルに再利用識別子が必要なのはなぜですか?

分類Dev

TableViewセルに再利用識別子が必要なのはなぜですか?

分類Dev

構文エラー、予期しない ''(T_ENCAPSED_AND_WHITESPACE)、識別子が必要です

分類Dev

Xcode7-マクロ名は識別子である必要があります

分類Dev

OracleSQLの識別子が無効です

分類Dev

PLSQL識別子を宣言する必要があります

Related 関連記事

  1. 1

    Java:識別子が必要です

  2. 2

    <識別子>が必要です、arrayList

  3. 3

    「識別子が必要です」エラー?

  4. 4

    Blazorの子RenderTemplate識別子が必要です

  5. 5

    ArrayListを宣言する方法は?(識別子が必要です)

  6. 6

    Android:R.java:エラー<識別子>が必要です

  7. 7

    Android:R.java:エラー<識別子>が必要です

  8. 8

    CS1001Webサイト識別子が必要です

  9. 9

    React svg xmlns:xlink識別子が必要です

  10. 10

    ASP.NETWebFormsの「識別子が必要です」エラー

  11. 11

    テーブルには複数の識別子が必要です

  12. 12

    最終識別子が必要なのはなぜですか?

  13. 13

    innoセットアップ識別子が必要です

  14. 14

    エラー:「_ Bool」の前に識別子が必要です

  15. 15

    NVCC unistd.h(792):エラー:識別子が必要です

  16. 16

    Scalaエラー:識別子が必要ですが、 ')'が見つかりました

  17. 17

    Scala-識別子が必要ですが、「=>」が見つかりました

  18. 18

    「==」のC ++で「エラー:識別子が必要です」を受信する

  19. 19

    Flutter Dart「識別子が必要です」&「「)」が見つかりました」

  20. 20

    パッケージが存在しません。<識別子>が必要です

  21. 21

    Java / C#で国際識別子を使用する必要がありますか?

  22. 22

    トークン「クラス」の構文エラー、識別子が必要です

  23. 23

    エラー:「テンプレート」の前に識別子が必要です

  24. 24

    TableViewセルに再利用識別子が必要なのはなぜですか?

  25. 25

    TableViewセルに再利用識別子が必要なのはなぜですか?

  26. 26

    構文エラー、予期しない ''(T_ENCAPSED_AND_WHITESPACE)、識別子が必要です

  27. 27

    Xcode7-マクロ名は識別子である必要があります

  28. 28

    OracleSQLの識別子が無効です

  29. 29

    PLSQL識別子を宣言する必要があります

ホットタグ

アーカイブ