第一次海報在這裏,很新手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,所以你有任何指針都會非常感激。僅供參考,這是一個學校作業。
對不起,如果任何格式化關閉/難以閱讀。謝謝你的幫助!
感謝您的回答。我從Node.h中刪除了'linked_list.h' - 那時我已經用盡了方法來解決這個問題,並且只是給了一個鏡頭。現在,我試着在'linked_list.cpp'中切換#include文件的順序,但是我仍然遇到同樣的錯誤,有什麼想法?再次感謝您的幫助。 – user1267113 2012-03-13 18:11:44
您可以嘗試使用鏈接列表.h中的節點名稱空間進行顯式指定。或者hack並在linked_list.h的頂部添加'using namespace node_version_0;'。 – 2012-03-13 19:43:43