2 Stimmen

Dummer Syntaxfehler c++

Ich bin völlig neu in C++.

Ich habe mir über eine Stunde lang den Kopf über diesen Fehler zerbrochen. Wahrscheinlich kann jemand mit Erfahrung direkt durch sie zu sehen.

Der folgende Code gibt einen Fehler aus:

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 setzt eine rote Linie unter profit in den Parametern von determineProfit und sagt:

expected a ')' before identifier profit .

Ich bin für jede Hilfe dankbar. Danke!

12voto

Ed S. Punkte 118985

Sie sind Ihre Arrays deklarieren, als ob dies c# waren. Es sollte sein

int profit[]

Oder

int *profit

Sie werden als Nächstes auf diese Seite stoßen. Sie müssen Ihre Klasse mit einem Semikolon abschließen.

class Foo { 

};  <----

En nächste Das Problem, das Sie haben, ist ein logisches, kein syntaktisches. Dies tut nicht das, was Sie denken:

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

Sie nehmen die sizeof zwei Zeigern, nicht die Größe der Arrays. Sie haben tatsächlich:

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

Sie müssen der Funktion auch die Größe von your übergeben (oder, besser noch, aufhören, Arrays zu verwenden und eine vector<T> .)

Wenn Sie ein "Array" als Argument für Ihre Funktion verwenden, zerfällt es in einen Zeiger auf den Array-Typ (ein Array selbst kann nicht an eine Funktion übergeben werden). Daraus folgt, dass:

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
}

Diese Zeile bewirkt, dass die erste Iteration immer übersprungen wird. Ich bin nicht sicher, ob das beabsichtigt ist:

if (i == j) continue;

3voto

jli Punkte 6463

In C++ werden Arrays nicht auf diese Weise deklariert, die [] muss dem Namen nachgehen. Beachten Sie auch, dass Sie nach der Klassendeklaration ein Semikolon setzen müssen.

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; 
  } 
};

Bearbeiten: Denken Sie auch daran, dass sizeof(pointer) die Anzahl der Bytes des Zeigertyps zurückgibt, nicht die Anzahl der Elemente im Array. Wenn Sie also einen int Array, sizeof(array) == sizeof(int) . Ihr N Wert ist immer gleich 1.

2voto

John Humphreys Punkte 35064

Diese Zeile ist falsch:

 int determineProfit (int [] profit, int [] decay) { 

Ändern Sie es in:

int determineProfit (int profit[], int decay[]) { 

o

int determineProfit (int* profit, int* decay) { 

und fügen Sie eine abschließende ;

Wenn Sie das tun und einen Hauptteil hinzufügen, natürlich:

int main() {}

dann können Sie Ihren Code kompilieren - ich habe es gerade mit g++ versucht.

1voto

Versuchen Sie int determineProfit (int* profit, int* decay) denn für formale Argumente sind Arrays und Zeiger fast gleich.

0voto

Chris Smith Punkte 5054

Klammern sind mit dem Variablennamen verbunden, nicht mit dem Typ. Die erste Zeile sollte lauten

int determineProfit (int profit[], int decay[]) {

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X