1

必要に応じて、これは私のコード全体 (C++) です。Eclipse Kepler を使用しています。

//Tutorials from www.cplusplus.com/doc/tutorial combined
#include <iostream>
using namespace std;

//tutorial #1.1 Function with type -- Addition
int addition (int a, int b)
{
  int r;
  r=a+b;
  return (r);
}

//tutorial #1.2 Function with type -- Subtraction
int subtraction (int a, int b){
    int r;
    r=a-b;
    return (r);
}

//tutorial #1.3 Function with NO type
void printmessage (void)
{
  cout << "It's good to be the king." << '\n';
}

//tutorial #2.1 Arguments passed by reference
void duplicate (int& a, int& b, int& c)
{
  a*=2;
  b*=2;
  c*=2;
}

//tutorial #2.2 and 2.5 Arguments passed by value and Declaration of preferred inline function
inline void prevnext (int x, int& prev, int& next)
{
  prev = x-1;
  next = x+1;
}

//tutorial #2.3 Default values in parameters (functions)
int divide (int a, int b=2)
{
  int r;
  r=a/b;
  return (r);
}

//tutorial #2.4.1 Overloaded functions -- int cannot handle decimals
int operate (int a, int b)
{
  return (a*b);
}

//tutorial #2.4.2 Overloaded functions -- float is used with decimals
float operate (float a, float b)
{
  return (a/b);
}

//tutorial #2.6 Recursivity -- factorial calculator
long factorial (long a)
{
  if (a > 1)
   return (a * factorial (a-1));
  else
   return (1);
}

//tutorial #2.7 Declaring function prototypes
void odd (int a); //declared
void even (int a); //declared

void odd (int a) //defined
{
  if ((a%2)!=0) cout << "Number is odd.\n";
  else even (a);
}

void even (int a) //defined
{
  if ((a%2)==0) cout << "Number is even.\n";
  else odd (a);
}

//tutorial #3.1 Initializing and accessing the values of an array
float billy [] = {16, 2, 77, 40, 12071};
float k, result=0;

int main ()
{
    cout << "Name: My Name \n";
    cout << "Homework: 1";
    cout << endl;
    cout << endl;

  int x=8, y=1, z, aa;
  float n=3.0,m=9.0;
  long number;

  z = addition (4,2);
  aa = subtraction (6,3);
    cout << "The sum is " << z << '\n';
    cout << "The subtraction is " << aa << '\n';
    cout << "The second subtraction is " << subtraction(x,y) << '\n';

  z = addition (x,y) - 3;
    cout << "The new sum is " << z << '\n';

  printmessage();

  duplicate (x,y,z);
    cout << "x=" << x << ", y=" << y << ", z=" << z << '\n';

  prevnext (x, y, z);
    cout << "Previous=" << y << ", Next=" << z;

    cout << endl;
    cout << "Division = " << divide (14);
    cout << endl;
    cout << "Second Division = " << divide (10,8);
    cout << endl;

    cout << "Operate Multiply: " << operate(x,y);
    cout << '\n';
    cout << "Operate Divide: " << operate(n,m);
    cout << endl;

    cout << "Please type a number: ";
      cin >> number;
      cout << number << "! = " << factorial (number);        
      cout << endl;

    int i;
      do {
        cout << "Type a number (type 0 to exit): ";
        cin >> i;
        odd (i);
      } while (i!=0);

      for ( k=0 ; k<5 ; k++ )
       {
          result += billy[k];
       }
       cout << result;

  return 0;
}

これは、問題が発生しているメインで記述された私のコードの一部です。より具体的には、結果 += billy[k] 行がエラーをスローしています。

      for ( k=0 ; k<5 ; k++ )
       {
          result += billy[k];
       }
       cout << result;

これは以下に対応します。

//tutorial #3.1 Initializing and accessing the values of an array
float billy [] = {16, 2, 77, 40, 12071};
float k, result=0;

このコードを修正するには助けが必要ですが、最も重要なことは、コードでこのエラーが発生した理由と、コードを改善する方法を知りたいことです (初歩的なレベルで、ここでは高度な概念を実装していないことは明らかです)。

編集 午後 11 時 10 分 int に戻すのを忘れていました。最初は int を持っていましたが、エラーが発生したため、float を試して違いがあるかどうかを確認しました。

4

3 に答える 3

1

C++ 標準に従って、配列インデックスは整数型でなければならず、変数kを整数型に変更する必要があります。

§8.3.4 配列

宣言 TD で、D の形式は次のとおりです。

D1 [ constant-expressionopt] attribute-specifier-seqopt

宣言 T D1 の識別子の型が「派生宣言子型リスト T」である場合、D の識別子の型は配列型です。

定数式 (5.19) が存在する場合、それは整数定数式であり、その値はゼロより大きくなければなりません。定数式は、配列の境界 (要素数) を指定します。定数式の値が N の場合、配列は 0 から N-1 までの N 個の要素を持ち、D の識別子の型は「NT の派生宣言子型リスト配列」です。

§ 5.19 定数式を見てください。

§ 5.19.4 この国際規格は浮動小数点演算の精度に制限を課していないため、変換中の浮動小数点式の評価が同じ式の評価と同じ結果をもたらすかどうかは規定されていません。

于 2013-08-31T02:54:01.823 に答える