2017-02-24 3 views
2

Ich bin ein c Schreiben Umsetzungsprogramm ++ zu stapeln und Warteschlange, beendete ich den Stapel Teil, aber beim Kompilieren ich diese Fehler immerC++ Compiler Fehler

arrayListImp.cpp:18:19: error: expected unqualified-id 
       arrayList[++top]= x; 
           ^
arrayListImp.cpp:28:13: error: 'arrayList' does not refer to a value 
       itemPoped=arrayList[top]; 
         ^
./arrayList.h:3:7: note: declared here 
class arrayList{ 
    ^
arrayListImp.cpp:35:9: error: 'arrayList' does not refer to a value 
     return arrayList[top]; 
      ^
./arrayList.h:3:7: note: declared here 
class arrayList{ 
    ^
arrayListImp.cpp:46:9: error: 'arrayList' does not refer to a value 
       cout<<arrayList[i]<<endl; 
        ^
./arrayList.h:3:7: note: declared here 
class arrayList{ 
    ^
4 errors generated. 

Hier ist die Header-Datei

#ifndef ARRAYLIST_H 

class arrayList{ 

public: 
    arrayList(); 
    static const int maxSize = 10; 
    int array[10]; 
}; 

class stack : public arrayList{ 

public: 
    stack();  
    void push(int x); 
    void pop(); 
    int Top(); 
    int isEmpty(); 
    void print(); 
    int x; 
    int top; 
    int itemPoped; 
    int i; 
}; 

#define ARRAYLIST_H 
#endif 

arrayListImp.cpp

#include <iostream> 
#include "arrayList.h" 
using namespace std; 

//Stack implementation 

stack::stack(){ 

    top = -1; 
} 

void stack::push(int x){ 

    if (top == maxSize -1){ 
     cout<<"Stack overflow"<<endl; 
    } 
    else{ 
     arrayList[++top]= x; 
     cout<<x<<", is pushed on to the stack"<<endl; 
    } 
} 

void stack::pop(){ 
    if (top == -1){ 
     cout<<"Stack underflow"<<endl; 
    } 
    else{ 
     itemPoped=arrayList[top]; 
     top--; 
     cout<<itemPoped<<", is poped from the stack"<<endl; 
    } 
} 

int stack::Top(){ 
    return arrayList[top]; 
} 

int stack::isEmpty(){ 
    if (top == -1) return 1; 
    return 0; 
} 

void stack::print(){ 
    cout<<"Stack: "<<endl; 
    for (i = 0; i<=top; i++){ 
     cout<<arrayList[i]<<endl; 

    } 
} 

arrayListUse.cpp

#include <iostream> 
#include "arrayList.h" 
using namespace std; 


int main() 
{ 
    //Stack testing 
    stack S; 
    S.push(1);S.print(); 
    S.push(2);S.print(); 
    S.push(3);S.print(); 
    S.pop();S.print(); 
    S.push(4);S.print(); 

    //Queue testing 



    return 0; 
} 

Können Sie bitte darauf hinweisen, was ich hier falsch mache?

+0

'arrayList [++ oben]' -> 'array [++ top]'. Scheint mir wie ein Tippfehler. –

Antwort

0

Sie sollten nur Ihre Fehlermeldungen lesen.

  1. sollten Sie array statt arrayList verwenden, die der Name der Klasse ist. Beziehe dich stattdessen nur auf die Variable.

    Die Fehlermeldung Sie bekam ist so etwas wie

    test.cpp: In member function ‘void stack::push(int)’: 
    test.cpp:44:18: error: expected unqualified-id before ‘[’ token 
         arrayList[++top]= x; 
           ^
    

    Wenn Sie die Leitung überprüfen Sie sofort sehen, was da nicht stimmt.

  2. Sie deklarieren einen Konstruktor arrayList::arrayList(), aber Sie definieren es nicht. Sie können die Deklaration entweder löschen oder in der cpp-Datei implementieren.

    arrayList::arrayList() { 
        // do some initialization 
    } 
    

    Die Fehlermeldung Sie bekam ist so etwas wie

    /tmp/cc4y06YN.o:test.cpp:function stack::stack(): error: undefined reference to 'arrayList::arrayList()' 
    

    Der Code kompilieren konnte, aber es hat nicht zu verknüpfen. So können alle Deklarationen korrekt sein, aber ein Symbol fehlt. Dies ist normalerweise der Fall, wenn Sie etwas, auf das Sie sich bezogen, deklariert haben, aber Sie haben es nie definiert.

0

Sie haben immer

geschrieben
arrayList[...] 

, was der Name der Klasse ist, aber den Code zu lesen scheint es, wie Sie

array[...] 

, die Zugriff auf die Daten dann schreiben wollte.

+0

Danke Ich habe das nicht beachtet. Die Fehler sind jetzt weg, aber ich erhalte diesen Fehler 'Undefinierte Symbole für die Architektur x86_64: " arrayList :: arrayList() ", referenziert von: stack :: stack() in arrayListImp-c791dd.o ld: symbol (s) nicht für Architektur gefunden x86_64 clang: Fehler: Linker-Befehl fehlgeschlagen mit Exit-Code 1 (mit -v wird der Aufruf angezeigt) ' –

+0

Sie haben arrayList :: arrayList() nicht implementiert. Es wurde nur im Header deklariert, aber nicht definiert – Aeonos