2012-03-17 37 views
0

我收到錯誤,試圖編譯我的頭文件中編程程序,我無法弄清楚它們。簡單鏈接列表讀取整數並將其顯示回C++

這是一個簡單的鏈接列表程序,用戶輸入一個整數列表並將其顯示回來。我會感謝所有的幫助。

繼承人是我的頭文件中的代碼

#ifndef Linklist 
#define Linklist 
#include<cstdlib> 


class linked_list { 



public: 

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

void insert_front (int num); 
bool empty() {return (head == NULL);} 

private: 

node *head; 
node *tail; 


}; 

下面是錯誤的即時得到

1>Compiling... 
1>Linklist.cpp 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(19) : error C2143: syntax error : missing ';' before '*' 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(20) : error C2143: syntax error : missing ';' before '*' 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(20) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(20) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(12) : error C2065: 'head' : undeclared identifier 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(12) : error C2065: 'tail' : undeclared identifier 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(15) : error C2065: 'head' : undeclared identifier 

1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(27) : fatal error C1070: mismatched #if/#endif pair in file 'c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h' 

1>Build log was saved at "file://c:\Users\albert\Documents\Visual Studio 2008\Projects\Linklist\Linklist\Debug\BuildLog.htm" 

1>Linklist - 10 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

這是我的計劃實施

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


int main() 
{ 



void linked_list::insert_front (int num) { 

node *head; 
     node *tail; 
     node *p; 
     int num; 

     head = NULL; 
     tail = NULL; 

node *p = new node; 
p->set_data (num): 
p->set_next (head); 
head = p; 

    for (int i=0; i<3; i++) 
    { 
     cout << "Enter number :"; 
     cin >> num; 
     newNode = new nodeType;   // Create the new node 
     newNode->data = num;   // and assign its data value 
     newNode->link = NULL;   // make its link point to nothing 

     if (first == NULL)    // If there is nothing in the list, then make the 
     {        
      first = newNode;   // newNode the first item and the last item 
      last = newNode; 
     } 

     else       // Else if first already has a value 
     {        
      last->link = newNode;  // make the last item link to the newNode 
      last = newNode;   // and make newNode the last item 

     } 
    } 

    // Display the list 

    DisplayList(first); 
    system("PAUSE"); 
    return(0); 


} 
+0

這是一個assignement,爲什麼你不使用'std :: list'?它是雙重鏈接的,但你會得到更多的糖果。 – 2012-03-17 20:10:26

回答

2

您正在使用某種類型的node所有在這個地方,但它沒有在你的程序中的任何地方定義。你將需要這樣做。

此外,還有一些有趣的業務在main()嵌套功能進行。我不知道你是否打算這樣做,但它確實很奇怪。

0

node不在範圍內。

您可能需要一個新的頭文件node.h來定義缺少的類型,如果該類型將在別處被使用。否則,您至少應該在列出的文件頂部定義它。

更值得關注的是您不瞭解正確縮進代碼的重要性。在你這樣做之前,這樣的問題會困擾你。

1

您是否在任何地方定義了node類?您需要包括它在頭文件以及文件,或至少把它定義:

class node; 

class linked_list { ... }; 

另外,不要忘了在#endif頭文件的結尾!

0

我從來沒有在VC++上工作......但嘗試在公共部分之前聲明頭文件中的私人部分...並且節點是在VC++中內置的數據類型?

1

如果這不是某種形式的家庭作業的話,請考慮使用標準::名單

#include <vector> 
#include <iostream> 
#include <iterator> 
#include <algorithm> 

int main() 
{ 
    std::cout << "Enter ints end with q" << std::endl; 
    std::list<int> l; //a deque is probably better TBH 
    std::copy(std::istream_iterator<int>(std::cin), 
       std::istream_iterator<int>(), 
       std::inserter<int>(l, l.begin())); 

    std::copy(l.begin(), l.end(), 
       std::ostream_iterator<int>(std::cout, " ")); 
} 

改寫現有的容器僅僅是一個壞主意;在這個用例中,deque比列表要好。

+0

但是這個清單在概念上更清潔。這個問題的提問者可能不準備去欣賞這個deque,但是。他不希望至少在幾個月後聽說迭代器的隨後失效。 (但他可能甚至不知道迭代器是什麼。)但你是對的。 – thb 2012-03-17 20:22:47

+0

我不認爲他們應該仔細研究迭代器失效,我認爲在學習如何使用迭代器學習如何手動執行一個容器之前,有興趣瞭解它們。我絕對認爲學習C++應該先學習有關容器的知識,然後再學習數組和手工製作鏈表。 – 111111 2012-03-17 20:25:59

相關問題