2017-02-24 176 views
2

我正在寫一個C++棧和隊列執行程序中,我完成了堆棧的一部分,但我發現這些錯誤在編譯時C++編譯器錯誤

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. 

這裏是頭文件

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

你能指出我在做什麼錯嗎?

+0

'arrayList [++ top]'>'array [++ top]'。看起來像是我的錯字。 –

回答

0

您應該只是閱讀您的錯誤消息。

  1. 您應該使用array代替arrayList,這是類的名稱。所以只需引用該變量。

    你得到的錯誤信息是一樣的東西

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

    當你檢查線路,您可以立即看到有什麼不對勁的地方。

  2. 您聲明瞭一個構造函數arrayList::arrayList(),但是您沒有定義它。你可以放棄聲明,或者你應該在cpp文件中實現它。

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

    你得到的錯誤信息是一樣的東西

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

    的代碼可以編譯,但它並沒有聯繫。所以所有的聲明都可能是正確的,但是一個符號丟失了。當你聲明你提到的某些東西時,通常是這種情況,但是你從來沒有定義它。

0

你總是有書面

arrayList[...] 

你是什麼類的名稱,但讀取代碼好像你想寫

array[...] 

這將訪問數據。

+0

謝謝我沒有注意到這一點。現在錯誤消失了,但是我收到了這個錯誤:架構x86_64的未定義符號: 「arrayList :: arrayList()」,引用來自: arrayListImp-c791dd.o中的stack :: stack() ld:symbol (s)not found for architecture x86_64 clang:錯誤:連接器命令失敗,退出代碼1(使用-v查看調用)' –

+0

您沒有實現arrayList :: arrayList()。它只是在頭文件中聲明,但沒有定義 – Aeonos