2012-03-13 51 views
0

第一次海報在這裏,很新手C++程序員(當前第三學期使用該語言),我有一些麻煩。在搜索結束並搜索論壇後,我一直無法提出解決方案 - 任何幫助你都可以提供很好的幫助。碰到幾個「表達式必須有指向類類型的指針」錯誤。 C++,使用Visual Studio 2010

1頭文件

linked_list.h

#ifndef my_linked_list 
#define my_linked_list 

#include "Node.h" 
#include <cstdlib> 

namespace linked_list_version_0{ 

class linked_list { 

public: 

linked_list() {head = NULL; tail = NULL;} 
~linked_list(); 

void insert_back (int x); 
void insert_front (int x); 
int remove_front(); 
int remove_back(); 
bool empty() {return (head == NULL);} 

private: 

node * head; 
node * tail; 

}; //end class linked_list 
}//end namespace linked_list_version_0 

#endif 

實現文件:

linked_list.cpp

#include "stdafx.h" 
#include "Node.h" 
#include "linked_list.h" 
#include <iostream> 

using namespace node_version_0; 
using namespace linked_list_version_0; 

void linked_list::insert_front (int x) { 

node *p = new node; 
p->set_data (x); 
p->set_next (head); 
head = p; 
if (head->next() == NULL) tail = head; // takes care of inserting into the empty list 
} //end insert_front 

int linked_list::remove_front() { 
// assumes the list is not empty 

node *p = head; 
int x = p-> get_data(); //could not use data(), had to use get_data 
head = head->next() ; 
delete p; 
if (head==NULL) tail = NULL; // takes care of deleting only element in the list 
return x; 
}//end remove_front 

linked_list::~linked_list() { 

node * p; 
while (head != NULL) { 
    p=head; 
head = head->next(); 
delete p; 
} 
tail = NULL; 
}//deconstructor 

void linked_list::insert_back (int x) { 
node * q = new node; 
q->set_data(x); 
q->set_next(NULL); 
if (tail == NULL) head = q; else tail -> set_next(q); 
tail = q; 
} //end insert_back 

int linked_list::remove_back() { 
// assumes the list isn’t empty 

node *q = tail; 
int x= tail->data(); 
if (head == tail) 
{head = NULL; tail = NULL;} 
else { 
tail = head; 
while (tail->next()!=q) 
tail = tail->next(); 
} 
delete q; 
tail->set_next(NULL); 
return x; 
} //end remove back 

第二頭文件

Node.h

#ifndef my_node 
#define my_node 

#include "linked_list.h" 

//implementation file unnecessary for this header as 
//inline declarations are used 

namespace node_version_0{ 

class node{ 

public: 

node(); 
void set_data(int x) {data = x;} //sets the data value of the node 
void set_next(node * n) { next = n;} //sets the address to the next node 
int get_data() const {return data;} //returns the data value from the node to user 
node * next() {return next;}; //returns the address of the next node 
const node * next() const {return next;} //same as above, "write protected" 

private: 

int data; 
node * next; 

};//end class node 
}//end namespace node_version_0 

#endif 

所以我跑入問題與linked_list.cpp實現文件。

所有的head-> next()都給出錯誤「表達式必須有指向類類型的指針」。同樣的錯誤發生在所有發生的這裏的尾巴>發信人

所以我敢肯定是一件簡單的事情 - 但是我是無法想象的新手。我知道這段代碼對你們來說可能看起來很sl ha,所以你有任何指針都會非常感激。僅供參考,這是一個學校作業。

對不起,如果任何格式化關閉/難以閱讀。謝謝你的幫助!

回答

0

說實話,我本來預計它會失敗的更早。由於包含文件的順序,當編譯器到達linked_list類的聲明時,它不會知道node是什麼。這就是我期望第一個錯誤出現在linked_list.h中的原因。

從我所看到的,Node.h不需要包含'linked_list.h`。

+0

感謝您的回答。我從Node.h中刪除了'linked_list.h' - 那時我已經用盡了方法來解決這個問題,並且只是給了一個鏡頭。現在,我試着在'linked_list.cpp'中切換#include文件的順序,但是我仍然遇到同樣的錯誤,有什麼想法?再次感謝您的幫助。 – user1267113 2012-03-13 18:11:44

+0

您可以嘗試使用鏈接列表.h中的節點名稱空間進行顯式指定。或者hack並在linked_list.h的頂部添加'using namespace node_version_0;'。 – 2012-03-13 19:43:43

相關問題