Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Silly syntax error c++

Tags:

c++

syntax

I'm completely new to C++.

Bashing my head against this error for over an hour. Probably someone with experience can see right through it.

The following code gives an error:

class TimeTravellingCellar { 

private:

public:
  int determineProfit (int [] profit, int [] decay) { 
    int N = sizeof(profit)/sizeof(decay); 
    int max = 0; 
    for (int i = 0; i < N; i++) { 
      for (int j = 0; j < N; j++) { 
        if (i == j) continue; 
        if (profit [i] - decay [j] > max) 
          max = profit [i] - decay [j]; 
      } 
    } 
    return max; 
  } 
}

Visual Studio Express puts a red line under profit in the parameters of determineProfit and says:

expected a ')' before identifier profit.

I will appreciate some help. Thanks!

like image 312
Lost_DM Avatar asked Feb 13 '26 15:02

Lost_DM


1 Answers

You are declaring your arrays as if this were c#. It should be

int profit[]

Or

int *profit

You'll hit this one next. You need to terminate your class with a semi-colon.

class Foo { 

};  <----

The next problem you have is logical, not syntactic. This does not do what you think it does:

int N = sizeof(profit)/sizeof(decay); 

You are taking the sizeof two pointers, not the size of the arrays. You actually have:

int N = 4/4  /* assumes sizeof int == 4 */

You need to pass in the size of your to the function as well (or, better yet; stop using arrays and use a vector<T>.)

When you take an "array" as an argument to your function it actually decays to a pointer to the array type (an array proper cannot be passed to a function). So it follows that:

void Foo( int array[] ) {
    size_t arrSize = sizeof(array);
    // arrSize == 4 for a 32-bit system, i.e., sizeof(int*)

    int a[100];
    size_t actualSizeInBytes = sizeof(a);
    // actualSizeInBytes == 400, i.e., 4 * 100 as an int occupies 4 bytes
}

Next, this line causes your first iteration to always be skipped. Not sure if that is intentional:

if (i == j) continue; 
like image 105
Ed S. Avatar answered Feb 15 '26 05:02

Ed S.