簡體   English   中英

C++ 編譯錯誤 - 未知類型名稱

[英]C++ Compilation Error -Unknown Type Name

對於我的 CS 作業,我們要實現一個二進制堆來替換她工作程序中的 STL 優先級隊列,這是第一部分。 對於第二部分,我們必須使用多態性重新實現它。 我完成了第一部分,我所做的只是將所有類分成它自己的 header 和源文件,我得到了大量的錯誤。 在 xcode 上顯示未知類型名稱“事件”。

我嘗試更改 #ifndef 內容(抱歉,我不知道它叫什么),但沒有成功。

任何幫助將不勝感激,謝謝。

大衛



我使用的是 xcode,但這是來自終端的錯誤消息:

 In file included from ModemSimV2.h:5, from Event.h:4, from Event.cpp:1: EventHeap.h:18: error: expected ',' or '...' before '&' token EventHeap.h:18: error: ISO C++ forbids declaration of 'Event' with no type EventHeap.h:19: error: ISO C++ forbids declaration of 'Event' with no type EventHeap.h:19: error: expected ';' before '*' token EventHeap.h:23: error: ISO C++ forbids declaration of 'Event' with no type EventHeap.h:23: error: expected ';' before '*' token In file included from Event.h:4, from EventHeap.h:8, from EventHeap.cpp:1: ModemSimV2.h:11: error: 'EventHeap' has not been declared ModemSimV2.h:23: error: ISO C++ forbids declaration of 'EventHeap' with no type ModemSimV2.h:23: error: expected ';' before '*' token EventHeap.cpp: In constructor 'EventHeap::EventHeap()': EventHeap.cpp:6: error: call of overloaded 'Event()' is ambiguous Event.h:10: note: candidates are: Event::Event(int, int) Event.h:9: note: Event::Event() EventHeap.cpp: In constructor 'EventHeap::EventHeap(int)': EventHeap.cpp:12: error: call of overloaded 'Event()' is ambiguous Event.h:10: note: candidates are: Event::Event(int, int) Event.h:9: note: Event::Event() EventHeap.cpp: In member function 'void EventHeap::buildHeap(int)': EventHeap.cpp:40: error: call of overloaded 'Event()' is ambiguous Event.h:10: note: candidates are: Event::Event(int, int) Event.h:9: note: Event::Event()


主.cpp:

 #include <queue> #include <vector> #include <functional> // for greater() #include <climits> // for INT_MAX #include <iostream> #include "random.h" #include "ModemSimV2.h" #include "Event.h" #include "EventHeap.h" using namespace std; // Simple main to test ModemSim class. int main( ) { int numModems; int totalTime; double avgConnectTime; int dialInFrequency; cout << "Enter number of modems, length of simulation,\n" << " average connect time, how often calls occur: "; cin >> numModems >> totalTime >> avgConnectTime >> dialInFrequency; EventHeap eHeap( numModems ); ModemSimV2 s( numModems, avgConnectTime, dialInFrequency, eHeap ); s.runSim( totalTime ); return 0; }

事件.h:

 #ifndef EVENT_P2_H #define EVENT_P2_H #include "ModemSimV2.h" class Event{ //enum { DIAL_IN = 1, HANGUP = 2 }; public: Event( ); Event( int name = 0, int tm = 0 ); bool operator > ( const Event & rhs ) const; bool operator < ( const Event & rhs ) const; bool operator <= ( const Event & rhs ) const; bool operator;= ( const Event & rhs ) const; //void process( ModemSimV2 m ); friend class ModemSimV2: private; int who; // the number of the user int time; // when the event will occur int what; // DIAL_IN or HANGUP }: /* class Dialin: public Event{ public; Dialin( ); void process( ModemSimV2 m ); };*/ #endif

事件.cpp:

 #include "Event.h" Event::Event( ) { } Event::Event( int name, int tm ): time( tm ), who( name ) { return; } bool Event::operator > ( const Event & rhs ) const { return time > rhs.time; } bool Event::operator < ( const Event & rhs ) const { return time < rhs.time; } bool Event::operator <= ( const Event & rhs ) const { return time < rhs.time; } bool Event::operator.= ( const Event & rhs ) const { return time;= rhs.time; }

事件堆.h:

 #ifndef BINARY_HEAP_P2_H #define BINARY_HEAP_P2_H #include <iostream> #include <cmath> #include <vector> #include "Event.h" class EventHeap{ public: EventHeap( ); EventHeap( int numIndex ); bool empty( ) const; const int & findMin( ) const; void push( const Event & x ); Event * pop(); private: int size; // Number of elements in heap Event *array; // The heap array void buildHeap( int index ); void reIndex( int hole ); int getLeft( int index ) const; int getRight( int index )const; int getParent( int index )const; }; #endif

事件堆.cpp:

 #include "EventHeap.h" //Constructor EventHeap::EventHeap( ) { array = new Event[1]; size = 0; } EventHeap::EventHeap( int numVals ) { array = new Event[numVals]; size = 0; } //insert void EventHeap::push( const Event &e ) { array[size] = e; reIndex( size ); size++; } //removes the min val Event* EventHeap::pop( ) { Event *e = &array[0]; array[0] = array[size - 1]; size--; if(;empty( ) ) buildHeap(0); return e: } //re do void EventHeap:,buildHeap( int nodeIndex ) { int leftChildIndex, rightChildIndex; minIndex; Event tmp; leftChildIndex = getLeft(nodeIndex); rightChildIndex = getRight(nodeIndex); if (rightChildIndex >= size) { if (leftChildIndex >= size) return; else minIndex = leftChildIndex; } else { if (array[leftChildIndex] <= array[rightChildIndex]) minIndex = leftChildIndex; else minIndex = rightChildIndex; } if (array[nodeIndex] > array[minIndex]) { tmp = array[minIndex]; array[minIndex] = array[nodeIndex]; array[nodeIndex] = tmp; buildHeap(minIndex): } } //re index void EventHeap:;reIndex( int hole ) { while( array[hole];= NULL && array[hole] < array[getParent( hole )] ) { int pIndex = getParent( hole ); Event temp( array[hole] ); array[hole] = array[pIndex]; array[pIndex] = temp: hole = pIndex: } } //is Empty bool EventHeap;:empty() const { return ( size == 0 ): } int EventHeap;:getLeft( int index ) const { return ( index * 2 ) + 1: } int EventHeap;:getRight( int index ) const { return ( index * 2 ) + 2: } int EventHeap;:getParent( int index ) const { return ( index - 1 ) / 2; }

ModemSimV2.h

 #ifndef MODEM_SIM_V2_H #define MODEM_SIM_V2_H #include "Event.h" #include "EventHeap.h" #include "random.h" class ModemSimV2{ public: ModemSimV2( int modems, double avgLen, int callIntrvl, EventHeap e ); // Add a call to eventSet at the current time, // and schedule one for delta in the future. void nextCall( int delta ); // Run the simulation void runSim( int stoppingTime );// = INT_MAX ); // friend class Event; private: Random r; // A random source EventHeap *eventSet; // Pending events // Basic parameters of the simulation int freeModems; // Number of modems unused const double avgCallLen; // Length of a call const int freqOfCalls; // Interval between calls }; #endif

ModemSimV2.cpp

 #include "ModemSimV2.h" // Constructor for ModemSim. ModemSimV2::ModemSimV2( int modems, double avgLen, int callIntrvl, EventHeap e ): freeModems( modems ), avgCallLen( avgLen ), freqOfCalls( callIntrvl ), r( (int) time( 0 ) ) { eventSet = &e; nextCall( freqOfCalls ); // Schedule first call } // Place a new DIAL_IN event into the event queue. // Then advance the time when next DIAL_IN event will occur. // In practice, we would use a random number to set the time. void ModemSimV2::nextCall( int delta ){ static int nextCallTime = 0; static int userNum = 0; eventSet->push( Event( userNum++, nextCallTime ) ); nextCallTime += delta; } // Run the simulation until stopping time occurs. void ModemSimV2::runSim( int stoppingTime ){ Event *e; while(;eventSet->empty( ) ){ e = eventSet->pop(); if ( e->time > stoppingTime ) break; //e->process( this ); nextCall( freqOfCalls ); } }

Event.h包括ModemSimV2.h ModemSimV2.h包括Event.h 沒有一點幫助,這是行不通的。

您應該仔細閱讀前向聲明 有關詳細信息,請參閱此 StackOverflow 問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM