none
[C++] - C2011'class' type redefinition RRS feed

  • Pergunta

  • Bom dia, tudo bem?

    Está dando o seguinte erro na hora de compilar meu arquivo header. 
    A mensagen é: Error2 - error C2011: 'MyEventLog' : 'class' type redefinition 

    E o código do meu arquivo header (MyEventLog.h) é:

    using namespace System;
    using namespace System::Collections;
    using namespace System::Collections::Generic;
    using namespace System::Diagnostics;
    using namespace System::IO;
    
    public ref class MyEventLog{
    private:
    	String ^pvtSource;
    	String ^pvtFileName;
    	String ^pvtLogDir;
    	StreamWriter ^pvtFile; 
    
    public:
    	MyEventLog(String ^Source);
    	void WriteEntry(String ^info, EventLogEntryType EvtType);
    	void Close();
    };
    

    Se alguém puder me ajudar...

    Abraços.


    Alan Machado _ If mySocialFile.IsNull Then Return True
    segunda-feira, 26 de dezembro de 2011 12:55

Respostas

  • Alan, parece que vc está incluindo o MyEventLog.h em mais de um lugar no seu código. Verifique nas suas outras classes se isso acontece. Aí, na hora de compilar, o compilador entende que a classe MyEventLog está sendo definida mais uma vez, porque ele troca o #include "MyEventLog.h" pelo código que está nesse arquivo. Para adiantar, verifique se vc está fazendo o include no header (.h) e na implementação (.cpp) da mesma classe. Isso causa o erro que vc está tendo.
    segunda-feira, 26 de dezembro de 2011 17:30

Todas as Respostas

  • Como está o seu arquivo MyEventLog.cpp?
    segunda-feira, 26 de dezembro de 2011 16:18
  • #include "MyEventLog.h"
    #include "stdafx.h"
    
    using namespace System;
    using namespace System::Collections;
    using namespace System::Collections::Generic;
    using namespace System::Xml;
    using namespace System::Diagnostics;
    using namespace System::IO;
    
    MyEventLog::MyEventLog(String ^Source){
    	try{
    		pvtSource = Source;
    		pvtLogDir = Path::Combine(Path::GetDirectoryName(Process::GetCurrentProcess()->MainModule->FileName), "LOG");
    		Directory::CreateDirectory(pvtLogDir);
    		pvtLogDir = Path::Combine(pvtLogDir, Path::GetFileNameWithoutExtension(Process::GetCurrentProcess()->MainModule->FileName)->ToUpper());
    		Directory::CreateDirectory(pvtLogDir);
    	}catch (Exception ^ex){
    		pvtSource = "MyEventLog";
    		this->WriteEntry(String::Concat("Error on MyEventLog.New: ", ex->Message), EventLogEntryType::Error);
    	}
    }
    
    void MyEventLog::WriteEntry(String ^info, EventLogEntryType EvtType){
    	FileInfo ^FileInfo = nullptr;
    	String ^NewFileName = nullptr;
    	int iCnt = 0;
    
    	try{
    		pvtFileName = Path::Combine(pvtLogDir, String::Concat(DateTime::Now.ToString("yyyyMMdd"), " [", pvtSource, "].LOG"));
    		if (File::Exists(pvtFileName)){
    			FileInfo = gcnew System::IO::FileInfo(pvtFileName);
    
    			if (FileInfo->Length > 102400){
    				iCnt = 1;
    				do{
    					NewFileName = Path::Combine(Path::GetDirectoryName(pvtFileName), String::Concat(Path::GetFileNameWithoutExtension(pvtFileName), "(", iCnt, ")", Path::GetExtension(pvtFileName)));
    					iCnt += 1;
    				} while (File::Exists(NewFileName));
    				File::Move(pvtFileName, Path::GetFileName(NewFileName));
    			}
    		}
    
    		//pvtFile = Microsoft::VisualBasic::FileIO::FileSystem::OpenTextFileWriter(pvtFileName, true);
    		//Ajustar...
    
    		if (pvtFile != nullptr){
    			pvtFile->WriteLine(String::Concat(DateTime::Now.ToString("[HH:mm:ss.fffffff]"), " ", info, " - ", EvtType.ToString()));
    			pvtFile->Close();
    			pvtFile = nullptr;
    		}
    
    	}catch (Exception ^ex){
    		Debug::Write(String::Concat("MyEventLog.WriteEntry error:", ex->Message));
    	}finally{
    		if (pvtFile != nullptr){
    			pvtFile->Close();
    		}
    
    		pvtFile = nullptr;
    		FileInfo = nullptr;
    	}
    }
    
    void MyEventLog::Close(){
    	try{
    		if (pvtFile != nullptr){
    			pvtFile->Close();
    		}
    	}catch (Exception ^ex){
    		Debug::Write(String::Concat("MyEventLog.WriteEntry error:", ex->Message));
    	}
    }
    


    Alan Machado _ If mySocialFile.IsNull Then Return True
    segunda-feira, 26 de dezembro de 2011 17:00
  • Alan, parece que vc está incluindo o MyEventLog.h em mais de um lugar no seu código. Verifique nas suas outras classes se isso acontece. Aí, na hora de compilar, o compilador entende que a classe MyEventLog está sendo definida mais uma vez, porque ele troca o #include "MyEventLog.h" pelo código que está nesse arquivo. Para adiantar, verifique se vc está fazendo o include no header (.h) e na implementação (.cpp) da mesma classe. Isso causa o erro que vc está tendo.
    segunda-feira, 26 de dezembro de 2011 17:30
  • Obrigado, Vinicius. Era isso mesmo... Estava fazendo include na mesma classe. Eu mal sabia disso...
    Alan Machado _ If mySocialFile.IsNull Then Return True
    segunda-feira, 26 de dezembro de 2011 17:37