-1

コードは次のとおりです。

#include <string>
#include <iostream>

#include <vector>
#include <algorithm>

using namespace std;

struct Pair{
  string name;
  double val;
};

vector<Pair> pairs;

double& value(const string& s)
{
  for(int i=0; i < pairs.size(); i++)
    if(s == pairs[i].name)
      return pairs[i].val;

  Pair p = {s, 0};
  pairs.push_back(p);

  return pairs[pairs.size() - 1].val;
}

int main()
{
  string buf;
  while(cin>>buf) value(buf)++;

  for(vector<Pair>::const_iterator p = pairs.begin(); p != pairs.end(); ++p)
    cout << p->name << ": " << p->val << '\n';
  return 0;
}

コンパイラは常に Line (Pair p = {s, 0};) が間違っていると文句を言います:
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
....\cpp\TEST.CPP:
Warning W8012 .. ..\cpp\TEST.CPP 18: 関数値 (const string &) の符号付き値と符号なし値を比較してい
ます
エラー E2291 ....\cpp\TEST.CPP 22: 関数値 (const string &) に } が必要です
エラー E2034 ....\cpp\TEST.CPP 22:
関数値で 'const string' を 'Pair' に変換できません (const string &)
エラー E2141 ....\cpp\TEST.CPP 22: 関数の宣言構文エラーvalue(
const string &)
エラー E2139 ....\cpp\TEST.CPP 22: 宣言がありません。in 関数値 (const
string &)
警告 W8070 ....\cpp\TEST.CPP 22: 関数は関数
value(const string &)に値を返す必要があります
警告 W8004 ....\cpp\TEST.CPP 22: 'p' には次の値が割り当てられます
関数値 (const string &) で使用されていません
エラー E2190 ....\cpp\TEST.CPP 22: 予期しない }
エラー E2238 ....\cpp\TEST.CPP 23: 「ペア」の複数の宣言
エラー E2344 .. ..\cpp\TEST.CPP 14: 'ペア' の以前の宣言
エラー E2141 ....\cpp\TEST.CPP 23: 宣言構文エラー
エラー E2040 ....\cpp\TEST.CPP 25: 宣言が正しく終了しませんでした
エラー E2190 ....\cpp\TEST.CPP 26: 予期しない}
* コンパイルで 10 個のエラー *

4

1 に答える 1

1

コードは、最新のコンパイラ (GCC 4.6.3) を使用して警告のみでコンパイルされます。コンパイラは完全に準拠していてはなりません。

GCC 4.3.4 でのコンパイルについては、こちらを参照してください。

于 2012-09-09T14:06:46.457 に答える