Solved

Error on Compile

Posted on 2006-11-20
10
605 Views
Last Modified: 2013-11-20
Hi guys,

I need some help please...

I have this function:

void CCustomModalDialog::Attach_Template(int argc, char **argv)
{
      char TargetPath[500];

      CFileOperation fo;

      for (int i = 4; i < 6; i++)
      {
            int k = 0;
            while (argv[i][k] != '\0')
            {
                  if (argv[i][k] == '~')
                        argv[i][k] = ' ';
                        k++;
            }
      }

      sprintf(TargetPath, "%s%s\\T\\%s\\%s.%s", ROOT, argv[1], argv[2], argv[3], argv[6]);
      fo.Delete(TargetPath);
      CopyFile(argv[4], TargetPath, true);



      return 0;
}

and when I compile, I get these errors:


C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(163) : error C2039: 'Attach_Template' : is not a member of 'CCustomModalDialog'
        c:\documents and settings\administrator\desktop\browser\custombrowser\custombrowser\custommodaldialog.h(16) : see declaration of 'CCustomModalDialog'
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(167) : error C2065: 'CFileOperation' : undeclared identifier
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(167) : error C2146: syntax error : missing ';' before identifier 'fo'
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(167) : error C2065: 'fo' : undeclared identifier
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(180) : error C2065: 'ROOT' : undeclared identifier
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(181) : error C2228: left of '.Delete' must have class/struct/union type
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(186) : error C2562: 'Attach_Template' : 'void' function returning a value
        C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(163) : see declaration of 'Attach_Template'


Anybody able to help me out please?


Cheers!
0
Comment
Question by:Cyber-Drugs
  • 6
  • 4
10 Comments
 
LVL 4

Author Comment

by:Cyber-Drugs
ID: 17979396
I removed one error by adding this to my header file:

void Attach_Template(int argc, char **argv);

But I'm still getting these:

C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(167) : error C2065: 'CFileOperation' : undeclared identifier
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(167) : error C2146: syntax error : missing ';' before identifier 'fo'
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(167) : error C2065: 'fo' : undeclared identifier
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(180) : error C2065: 'ROOT' : undeclared identifier
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(181) : error C2228: left of '.Delete' must have class/struct/union type
C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(186) : error C2562: 'Attach_Template' : 'void' function returning a value
        c:\documents and settings\administrator\desktop\browser\custombrowser\custombrowser\custommodaldialog.h(24) : see declaration of 'Attach_Template'
0
 
LVL 48

Expert Comment

by:AlexFM
ID: 17979406
Please show code in CustomModalDialog.h file.
What is CFileOperation? You need to include h-file where this file is defined.
0
 
LVL 48

Accepted Solution

by:
AlexFM earned 500 total points
ID: 17979425
Since Attach_Template is defined as void, replace
return 0;
with
return;

Compiler doesn't know what is CFileOperation. Add #include line with file where this class is defined.
0
 
LVL 4

Author Comment

by:Cyber-Drugs
ID: 17979464
AlexFM,

Changing 'return 0' to 'return' removed one erorr (down to 5 now)

I'm moving code form a bunch of small programs into one big program, so can I assume I need to find CFileOperation function inside the code of the the program I am taking source from?

Here is the header as requested:

//{{AFX_INCLUDES()
#include "webbrowser2.h"
//}}AFX_INCLUDES
#if !defined(AFX_CUSTOMMODALDIALOG_H__C93107E0_EDD1_4E10_B6BC_E3C6B4B99D2F__INCLUDED_)
#define AFX_CUSTOMMODALDIALOG_H__C93107E0_EDD1_4E10_B6BC_E3C6B4B99D2F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CustomModalDialog.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CCustomModalDialog dialog

class CCustomModalDialog : public CDialog
{
// Construction
public:
      CString cszURL;
      HICON m_hIcon;
      CCustomModalDialog(CWnd* pParent = NULL);   // standard constructor
      void ExecuteScriptFunction();
      void Attach_Template(int argc, char **argv);
      //void Create_CaseFolder(int argc, char **argv);
      //void Confirm_EditDocument(int argc, char **argv);

// Dialog Data
      //{{AFX_DATA(CCustomModalDialog)
      enum { IDD = IDD_MODAL_DIALOG };
      CWebBrowser2      m_browser;
      //}}AFX_DATA


// Overrides
      // ClassWizard generated virtual function overrides
      //{{AFX_VIRTUAL(CCustomModalDialog)
      protected:
      virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
      //}}AFX_VIRTUAL

// Implementation
protected:

      // Generated message map functions
      //{{AFX_MSG(CCustomModalDialog)
      virtual BOOL OnInitDialog();
      afx_msg void OnSize(UINT nType, int cx, int cy);
      //}}AFX_MSG
      DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CUSTOMMODALDIALOG_H__C93107E0_EDD1_4E10_B6BC_E3C6B4B99D2F__INCLUDED_)
0
 
LVL 4

Author Comment

by:Cyber-Drugs
ID: 17979488
I just found in one of the files of the code I am moving all the following, how do you think is the safest way of moving it over?

/** \file      FileOperations.cpp
                  Project: FopDemo\n
                  Project type: MFC App\n
                  Author: Vinnichenko Alexey\n
                  E-mail: subj@mail.ru\n
                  Description: Implementation of CFileOperation class and CFileExeption class.
*/

#include "stdafx.h"
//#include "resource.h"
//#include "FileOperations.h"

//************************************************************************************************************
CFExeption::CFExeption(DWORD dwErrCode)
{
      LPVOID lpMsgBuf;
      FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                        NULL, dwErrCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL);
      m_sError = (LPTSTR)lpMsgBuf;
      LocalFree(lpMsgBuf);
      m_dwError = dwErrCode;
}


CFExeption::CFExeption(CString sErrText)
{
      m_sError = sErrText;
      m_dwError = 0;
}


//************************************************************************************************************

CFileOperation::CFileOperation()
{
      Initialize();
}


void CFileOperation::Initialize()
{
      m_sError = _T("No error");
      m_dwError = 0;
      m_bAskIfReadOnly = true;
      m_bOverwriteMode = false;
      m_bAborted = false;
      m_iRecursionLimit = -1;
}


void CFileOperation::DoDelete(CString sPathName)
{
      CFileFind ff;
      CString sPath = sPathName;

      if (CheckPath(sPath) == PATH_IS_FILE)
      {
            if (!CanDelete(sPath))
            {
                  m_bAborted = true;
                  return;
            }
            if (!DeleteFile(sPath)) throw new CFExeption(GetLastError());
            return;
      }

      PreparePath(sPath);
      sPath += "*.*";

      BOOL bRes = ff.FindFile(sPath);
      while(bRes)
      {
            bRes = ff.FindNextFile();
            if (ff.IsDots()) continue;
            if (ff.IsDirectory())
            {
                  sPath = ff.GetFilePath();
                  DoDelete(sPath);
            }
            else DoDelete(ff.GetFilePath());
      }
      ff.Close();
      if (!RemoveDirectory(sPathName) && !m_bAborted) throw new CFExeption(GetLastError());
}


void CFileOperation::DoFolderCopy(CString sSourceFolder, CString sDestFolder, bool bDelteAfterCopy)
{
      CFileFind ff;
      CString sPathSource = sSourceFolder;
      BOOL bRes = ff.FindFile(sPathSource);
      while (bRes)
      {
            bRes = ff.FindNextFile();
            if (ff.IsDots()) continue;
            if (ff.IsDirectory()) // source is a folder
            {
                  if (m_iRecursionLimit == 0) continue;
                  sPathSource = ff.GetFilePath() + CString("\\") + CString("*.*");
                  CString sPathDest = sDestFolder + ff.GetFileName() + CString("\\");
                  if (CheckPath(sPathDest) == PATH_NOT_FOUND)
                  {
                        if (!CreateDirectory(sPathDest, NULL))
                        {
                              ff.Close();
                              throw new CFExeption(GetLastError());
                        }
                  }
                  if (m_iRecursionLimit > 0) m_iRecursionLimit --;
                  DoFolderCopy(sPathSource, sPathDest, bDelteAfterCopy);
            }
            else // source is a file
            {
                  CString sNewFileName = sDestFolder + ff.GetFileName();
                  DoFileCopy(ff.GetFilePath(), sNewFileName, bDelteAfterCopy);
            }
      }
      ff.Close();
}


bool CFileOperation::Delete(CString sPathName)
{
      try
      {
            DoDelete(sPathName);
      }
      catch(CFExeption* e)
      {
            m_sError = e->GetErrorText();
            m_dwError = e->GetErrorCode();
            delete e;
            if (m_dwError == 0) return true;
            return false;
      }
      return true;
}


bool CFileOperation::Rename(CString sSource, CString sDest)
{
      try
      {
            DoRename(sSource, sDest);
      }
      catch(CFExeption* e)
      {
            m_sError = e->GetErrorText();
            m_dwError = e->GetErrorCode();
            delete e;
            return false;
      }
      return true;
}


void CFileOperation::DoRename(CString sSource, CString sDest)
{
      if (!MoveFile(sSource, sDest)) throw new CFExeption(GetLastError());
}


void CFileOperation::DoCopy(CString sSource, CString sDest, bool bDelteAfterCopy)
{
      CheckSelfRecursion(sSource, sDest);
      // source not found
      if (CheckPath(sSource) == PATH_NOT_FOUND)
      {
            CString sError = sSource + CString(" not found");
            throw new CFExeption(sError);
      }
      // dest not found
      if (CheckPath(sDest) == PATH_NOT_FOUND)
      {
            CString sError = sDest + CString(" not found");
            throw new CFExeption(sError);
      }
      // folder to file
      if (CheckPath(sSource) == PATH_IS_FOLDER && CheckPath(sDest) == PATH_IS_FILE)
      {
            throw new CFExeption("Wrong operation");
      }
      // folder to folder
      if (CheckPath(sSource) == PATH_IS_FOLDER && CheckPath(sDest) == PATH_IS_FOLDER)
      {
            CFileFind ff;
            CString sError = sSource + CString(" not found");
            PreparePath(sSource);
            PreparePath(sDest);
            sSource += "*.*";
            if (!ff.FindFile(sSource))
            {
                  ff.Close();
                  throw new CFExeption(sError);
            }
            if (!ff.FindNextFile())
            {
                  ff.Close();
                  throw new CFExeption(sError);
            }
            CString sFolderName = ParseFolderName(sSource);
            if (!sFolderName.IsEmpty()) // the source is not drive
            {
                  sDest += sFolderName;
                  PreparePath(sDest);
                  if (!CreateDirectory(sDest, NULL))
                  {
                        DWORD dwErr = GetLastError();
                        if (dwErr != 183)
                        {
                              ff.Close();
                              throw new CFExeption(dwErr);
                        }
                  }
            }
            ff.Close();
            DoFolderCopy(sSource, sDest, bDelteAfterCopy);
      }
      // file to file
      if (CheckPath(sSource) == PATH_IS_FILE && CheckPath(sDest) == PATH_IS_FILE)
      {
            DoFileCopy(sSource, sDest);
      }
      // file to folder
      if (CheckPath(sSource) == PATH_IS_FILE && CheckPath(sDest) == PATH_IS_FOLDER)
      {
            PreparePath(sDest);
            char drive[MAX_PATH], dir[MAX_PATH], name[MAX_PATH], ext[MAX_PATH];
            _splitpath(sSource, drive, dir, name, ext);
            sDest = sDest + CString(name) + CString(ext);
            DoFileCopy(sSource, sDest);
      }
}


void CFileOperation::DoFileCopy(CString sSourceFile, CString sDestFile, bool bDelteAfterCopy)
{
      BOOL bOvrwriteFails = FALSE;
      if (!m_bOverwriteMode)
      {
            while (IsFileExist(sDestFile))
            {
                  sDestFile = ChangeFileName(sDestFile);
            }
            bOvrwriteFails = TRUE;
      }
      if (!CopyFile(sSourceFile, sDestFile, bOvrwriteFails)) throw new CFExeption(GetLastError());
      if (bDelteAfterCopy)
      {
            DoDelete(sSourceFile);
      }
}


bool CFileOperation::Copy(CString sSource, CString sDest)
{
      if (CheckSelfCopy(sSource, sDest)) return true;
      bool bRes;
      try
      {
            DoCopy(sSource, sDest);
            bRes = true;
      }
      catch(CFExeption* e)
      {
            m_sError = e->GetErrorText();
            m_dwError = e->GetErrorCode();
            delete e;
            if (m_dwError == 0) bRes = true;
            bRes = false;
      }
      m_iRecursionLimit = -1;
      return bRes;
}


bool CFileOperation::Replace(CString sSource, CString sDest)
{
      if (CheckSelfCopy(sSource, sDest)) return true;
      bool bRes;
      try
      {
            bool b = m_bAskIfReadOnly;
            m_bAskIfReadOnly = false;
            DoCopy(sSource, sDest, true);
            DoDelete(sSource);
            m_bAskIfReadOnly = b;
            bRes = true;
      }
      catch(CFExeption* e)
      {
            m_sError = e->GetErrorText();
            m_dwError = e->GetErrorCode();
            delete e;
            if (m_dwError == 0) bRes = true;
            bRes = false;
      }
      m_iRecursionLimit = -1;
      return bRes;
}


CString CFileOperation::ChangeFileName(CString sFileName)
{
      CString sName, sNewName, sResult;
      char drive[MAX_PATH];
      char dir  [MAX_PATH];
      char name [MAX_PATH];
      char ext  [MAX_PATH];
      _splitpath((LPCTSTR)sFileName, drive, dir, name, ext);
      sName = name;

      int pos = sName.Find("Copy ");
      if (pos == -1)
      {
            sNewName = CString("Copy of ") + sName + CString(ext);
      }
      else
      {
            int pos1 = sName.Find('(');
            if (pos1 == -1)
            {
                  sNewName = sName;
                  sNewName.Delete(0, 8);
                  sNewName = CString("Copy (1) of ") + sNewName + CString(ext);
            }
            else
            {
                  CString sCount;
                  int pos2 = sName.Find(')');
                  if (pos2 == -1)
                  {
                        sNewName = CString("Copy of ") + sNewName + CString(ext);
                  }
                  else
                  {
                        sCount = sName.Mid(pos1 + 1, pos2 - pos1 - 1);
                        sName.Delete(0, pos2 + 5);
                        int iCount = atoi((LPCTSTR)sCount);
                        iCount ++;
                        sNewName.Format("%s%d%s%s%s", "Copy (", iCount, ") of ", (LPCTSTR)sName, ext);
                  }
            }
      }

      sResult = CString(drive) + CString(dir) + sNewName;

      return sResult;
}


bool CFileOperation::IsFileExist(CString sPathName)
{
      HANDLE hFile;
      hFile = CreateFile(sPathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
      if (hFile == INVALID_HANDLE_VALUE) return false;
      CloseHandle(hFile);
      return true;
}


int CFileOperation::CheckPath(CString sPath)
{
      DWORD dwAttr = GetFileAttributes(sPath);
      if (dwAttr == 0xffffffff)
      {
            if (GetLastError() == ERROR_FILE_NOT_FOUND || GetLastError() == ERROR_PATH_NOT_FOUND)
                  return PATH_NOT_FOUND;
            return PATH_ERROR;
      }
      if (dwAttr & FILE_ATTRIBUTE_DIRECTORY) return PATH_IS_FOLDER;
      return PATH_IS_FILE;
}


void CFileOperation::PreparePath(CString &sPath)
{
      if(sPath.Right(1) != "\\") sPath += "\\";
}


bool CFileOperation::CanDelete(CString sPathName)
{
      DWORD dwAttr = GetFileAttributes(sPathName);
      if (dwAttr == -1) return false;
      if (dwAttr & FILE_ATTRIBUTE_READONLY)
      {
            if (m_bAskIfReadOnly)
            {
                  CString sTmp = sPathName;
                  int pos = sTmp.ReverseFind('\\');
                  if (pos != -1) sTmp.Delete(0, pos + 1);
                  CString sText = sTmp + CString(" is read olny. Do you want delete it?");
                  int iRes = MessageBox(NULL, sText, _T("Warning"), MB_YESNOCANCEL | MB_ICONQUESTION);
                  switch (iRes)
                  {
                        case IDYES:
                        {
                              if (!SetFileAttributes(sPathName, FILE_ATTRIBUTE_NORMAL)) return false;
                              return true;
                        }
                        case IDNO:
                        {
                              return false;
                        }
                        case IDCANCEL:
                        {
                              m_bAborted = true;
                              throw new CFExeption(0);
                              return false;
                        }
                  }
            }
            else
            {
                  if (!SetFileAttributes(sPathName, FILE_ATTRIBUTE_NORMAL)) return false;
                  return true;
            }
      }
      return true;
}


CString CFileOperation::ParseFolderName(CString sPathName)
{
      CString sFolderName = sPathName;
      int pos = sFolderName.ReverseFind('\\');
      if (pos != -1) sFolderName.Delete(pos, sFolderName.GetLength() - pos);
      pos = sFolderName.ReverseFind('\\');
      if (pos != -1) sFolderName = sFolderName.Right(sFolderName.GetLength() - pos - 1);
      else sFolderName.Empty();
      return sFolderName;
}


void CFileOperation::CheckSelfRecursion(CString sSource, CString sDest)
{
      if (sDest.Find(sSource) != -1)
      {
            int i = 0, count1 = 0, count2 = 0;
            for(i = 0; i < sSource.GetLength(); i ++)      if (sSource[i] == '\\') count1 ++;
            for(i = 0; i < sDest.GetLength(); i ++)      if (sDest[i] == '\\') count2 ++;
            if (count2 >= count1) m_iRecursionLimit = count2 - count1;
      }
}


bool CFileOperation::CheckSelfCopy(CString sSource, CString sDest)
{
      bool bRes = false;
      if (CheckPath(sSource) == PATH_IS_FOLDER)
      {
            CString sTmp = sSource;
            int pos = sTmp.ReverseFind('\\');
            if (pos != -1)
            {
                  sTmp.Delete(pos, sTmp.GetLength() - pos);
                  if (sTmp.CompareNoCase(sDest) == 0) bRes = true;
            }
      }
      return bRes;
}
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 4

Author Comment

by:Cyber-Drugs
ID: 17979546
Would it be easier if I maybe uploaded a copy of the project to ee-stuff.com - and you can then tell me what changes I need to make?
0
 
LVL 48

Assisted Solution

by:AlexFM
AlexFM earned 500 total points
ID: 17979593
Add line
#include "FileOperation.h"
to CustomModalDialog.cpp.

Uploading of the project is not necessary currently, because I see what you need to do. However, if the problem is too difficult to solve using standard EE posts, you can make your project available for download.
0
 
LVL 4

Author Comment

by:Cyber-Drugs
ID: 17979630
OK, I have managed to break it down to one error:

C:\Documents and Settings\Administrator\Desktop\Browser\CustomBrowser\CustomBrowser\CustomModalDialog.cpp(181) : error C2065: 'ROOT' : undeclared identifier
0
 
LVL 48

Assisted Solution

by:AlexFM
AlexFM earned 500 total points
ID: 17979661
I don't know what is ROOT. I guess this is from some other project - possibly some #define or variable. Open this project, right-click on ROOT and select "Go to definition". You can see what is ROOT and move approprtiate code to your current project.
0
 
LVL 4

Author Comment

by:Cyber-Drugs
ID: 17979737
You were correct AlexFM, it was a #define.

It now compiles!

Thank you for the help. :)
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now