Заранее извиняюсь, если вопрос попал не в ту тему. Файл-заголовок класса Код (Text): //FIFO.h #ifndef FIFO_H #define FIFO_H #include <windows.h> #include <cstdio> #include <conio.h> class FIFO { protected: long *RG; char HeadCounter,TailCounter; bool Full,Empty; public: FIFO(void); ~FIFO(); long* GetRG(); char GetHeadCounter(); char GetTailCounter(); void IncHeadCounter(); void IncTailCounter(); bool CmpHeadTail(); bool WriteElem(long Elem); long ReadElem(); void Overflow(); }; #endif Файл с текстами методов Код (Text): //FIFO.cpp #include "fifo.h" #define MEMSIZE 256 FIFO::FIFO(void) { RG = new long[MEMSIZE]; SecureZeroMemory(RG,MEMSIZE); HeadCounter = 0; TailCounter = 0; Empty = true; Full = false; } FIFO::~FIFO() { delete RG; } long* FIFO::GetRG() { return RG; } char FIFO::GetHeadCounter() { return HeadCounter; } char FIFO::GetTailCounter() { return TailCounter; } void FIFO::IncHeadCounter() { HeadCounter = GetHeadCounter()%256; } void FIFO::IncTailCounter() { TailCounter = GetTailCounter()%256; } bool FIFO::CmpHeadTail() { char Head,Tail; Head = GetHeadCounter(); Tail = GetTailCounter(); if (Head == Tail) { Empty = true; Full = false; return true; } if ((Head-Tail == 1)||(Head-Tail+255 == 1)) { Empty = false; Full = true; return true; } return false; } bool FIFO::WriteElem(long Elem) { char tail; tail = GetTailCounter(); CmpHeadTail(); if ((Full == true)||(Elem == 0x80000000)) { return false; } RG[tail] = Elem; IncTailCounter(); return true; } long FIFO::ReadElem() { char head; head = GetHeadCounter(); CmpHeadTail(); if (Empty) { return 0x80000000; } IncHeadCounter(); return RG[head]; } void FIFO::Overflow() { if (GetHeadCounter()==0) TailCounter = 255; else TailCounter = GetHeadCounter()-1; Full = true; Empty = false; } Файл с основной программой Код (Text): //Lab2.cpp #include "fifo.cpp" int main(void) { FIFO block(); int i,j; char ch; long elem; while(1) { system("cls"); printf("\n Моделирование памяти по принципу FIFO\n Числа приведены в 16с\с\n"); for (i=0; i<64; i++) { for (j=1; j<=4; j++) [b] printf("%2x %8x ",i+j*64,block.GetRG()[i+j*64]);[/b] printf("\n"); } printf("Нажмите \"W\" для записи, \"R\" для чтения, ESC для выхода из программы\n"); printf("Для проверки ситуации переполнения нажмите \"O\"\n"); switch (ch = getch()) { case 27: printf("Good Bye..."); return 0; case 'w': printf("Введите значение элемента: "); scanf("%l",&elem); [b] block.WriteElem(elem);[/b] printf("Нажмте любую клавишу для продолжения..."); getch(); break; case 'r': [b] printf("%d\n",block.ReadElem());[/b] getch(); break; case 'o': printf("Указатели головы и хвоста смещены в позицию FULL\n"); getch(); break; } } } При компиляции компилятор ругается следующими нецензурными словами: Код (Text): 1>c:\users\brj\documents\visual studio 2008\projects\memory_l2\memory_l2\lab2.cpp(17) : error C2228: left of '.GetRG' must have class/struct/union 1>c:\users\brj\documents\visual studio 2008\projects\memory_l2\memory_l2\lab2.cpp(30) : error C2228: left of '.WriteElem' must have class/struct/union 1>c:\users\brj\documents\visual studio 2008\projects\memory_l2\memory_l2\lab2.cpp(35) : error C2228: left of '.ReadElem' must have class/struct/union Компилятор - Visual C++ 2008 Места, на которые указывают ошибки отмечены в коде жирным шрифтом. Заранее благодарен.
//Lab2.cpp #include "fifo.cpp" int main(void) { FIFO block(); Убери скобки, нужно просто FIFO block; иначе с точки зрения языка это не создание локального объекта, а объявление функции без параметров, возвращающей FIFO.
Исправил. Однако после этого полезли ошибки линкера: Код (Text): 1>Lab2.obj : error LNK2005: "public: __thiscall FIFO::FIFO(void)" (??0FIFO@@QAE@XZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: __thiscall FIFO::~FIFO(void)" (??1FIFO@@QAE@XZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: long * __thiscall FIFO::GetRG(void)" (?GetRG@FIFO@@QAEPAJXZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: char __thiscall FIFO::GetHeadCounter(void)" (?GetHeadCounter@FIFO@@QAEDXZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: char __thiscall FIFO::GetTailCounter(void)" (?GetTailCounter@FIFO@@QAEDXZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: void __thiscall FIFO::IncHeadCounter(void)" (?IncHeadCounter@FIFO@@QAEXXZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: void __thiscall FIFO::IncTailCounter(void)" (?IncTailCounter@FIFO@@QAEXXZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: bool __thiscall FIFO::CmpHeadTail(void)" (?CmpHeadTail@FIFO@@QAE_NXZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: bool __thiscall FIFO::WriteElem(long)" (?WriteElem@FIFO@@QAE_NJ@Z) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: long __thiscall FIFO::ReadElem(void)" (?ReadElem@FIFO@@QAEJXZ) already defined in FIFO.obj 1>Lab2.obj : error LNK2005: "public: void __thiscall FIFO::Overflow(void)" (?Overflow@FIFO@@QAEXXZ) already defined in FIFO.obj 1>C:\Users\BRJ\Documents\Visual Studio 2008\Projects\Memory_l2\Debug\Memory_l2.exe : fatal error LNK1169: one or more multiply defined symbols found