Тема: Погано розумію перевантаження операторів та таке всяке.
Доброї ночі!
Ось такий вираз
stri += (MSTR)strj;
Я ледь башню собі не зламав думаючи що це. Чи то помилка, описка, чи то що це було задумано або що могло тут бути.
Що могло б підрозуміватіся?
MSTR- це клас! strj це масив, stri об'єкт класу MSTR. Мені це взагалі не зрозуміло! Як слона схрестили з бегемотом, вони ж зовсім ризні!
Я щось не розумію зовсим , ниякого сенсу.
Тобто я бачу звичайно що
Ничого я не бачу! Розтулмачте мені будь ласка!
Ось цей конкретний файл
// FILE dlgs.cpp
//
// use: libcmt.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
// shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib comctl32.lib
//
// ignore: libc.lib
#ifndef _MT
#define _MT
#endif
#include <windows.h>
#include <winbase.h>
#include <process.h>
#include <commctrl.h>
#include <string.h>
#include <stdio.h>
#include "ModalD.h"
#include "mstr.h"
#include "dlgs.rou"
#include "dlgs.var"
int WINAPI WinMain (HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpszArgs,int nWinMode)
{
::SetUnhandledExceptionFilter (UEFilter);
::InitCommonControls();
pmodalDialog = new ModalD(hThisInst,NULL);
if (pmodalDialog == NULL) ApplicationTerminate (0x666);
return pmodalDialog->ShowModalDialog ("MYDG");
}
// *** Subroutines ***
LONG WINAPI UEFilter (PEXCEPTION_POINTERS pExceptionInfo)
{
DecodeError ("Application Threads Exception", pExceptionInfo->ExceptionRecord->ExceptionCode);
return EXCEPTION_EXECUTE_HANDLER ;
}
void WINAPI DecodeError (char *pCaption, DWORD errcode)
{
char strj [80];
MSTR stri;
switch (errcode)
{
case EXCEPTION_ACCESS_VIOLATION: stri = "EXCEPTION_ACCESS_VIOLATION"; break;
case EXCEPTION_BREAKPOINT: stri = "EXCEPTION_BREAKPOINT"; break;
case EXCEPTION_DATATYPE_MISALIGNMENT: stri = "EXCEPTION_DATATYPE_MISALIGNMENT"; break;
case EXCEPTION_SINGLE_STEP: stri = "EXCEPTION_SINGLE_STEP"; break;
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: stri = "EXCEPTION_ARRAY_BOUNDS_EXCEEDED"; break;
case EXCEPTION_FLT_DENORMAL_OPERAND: stri = "EXCEPTION_FLT_DENORMAL_OPERAND"; break;
case EXCEPTION_FLT_DIVIDE_BY_ZERO: stri = "EXCEPTION_FLT_DIVIDE_BY_ZERO"; break;
case EXCEPTION_FLT_INEXACT_RESULT: stri = "EXCEPTION_FLT_INEXACT_RESULT"; break;
case EXCEPTION_FLT_INVALID_OPERATION: stri = "EXCEPTION_FLT_INVALID_OPERATION"; break;
case EXCEPTION_FLT_OVERFLOW: stri = "EXCEPTION_FLT_OVERFLOW"; break;
case EXCEPTION_FLT_STACK_CHECK: stri = "EXCEPTION_FLT_STACK_CHECK"; break;
case EXCEPTION_FLT_UNDERFLOW: stri = "EXCEPTION_FLT_UNDERFLOW"; break;
case EXCEPTION_INT_DIVIDE_BY_ZERO: stri = "EXCEPTION_INT_DIVIDE_BY_ZERO"; break;
case EXCEPTION_INT_OVERFLOW: stri = "EXCEPTION_INT_OVERFLOW"; break;
case EXCEPTION_PRIV_INSTRUCTION: stri = "EXCEPTION_PRIV_INSTRUCTION"; break;
case EXCEPTION_NONCONTINUABLE_EXCEPTION: stri = "EXCEPTION_NONCONTINUABLE_EXCEPTION"; break;
default:
errcode &= 0xFFFF;
if (errcode == 0) return ;
else stri = "SOFT RISED EXCEPTION";
break;
}
sprintf (strj," Exception code=0x%0x", errcode);
stri += (MSTR)strj;
type_message (stri, pCaption, 0);
}
void WINAPI type_message (LPCTSTR lpText, LPCTSTR lpCaption, UINT info)
{
UINT style;
style = MB_OK;
switch (info)
{
case 0: style |= MB_ICONERROR; break;
case 1: style |= MB_ICONEXCLAMATION; break;
}
::MessageBox (NULL,lpText,lpCaption,style);
}
void WINAPI ApplicationTerminate (int code)
{
::RaiseException
(
(EXCEPTION_ACCESS_VIOLATION & 0xFFFF0000) | (code & 0xFFFF), //EXCEPTION_ACCESS_VIOLATION - спроба читання або запису за адресою віртуальної пам'яті, до якої процес не має доступу.
EXCEPTION_NONCONTINUABLE,
0,
NULL
);
}
91 17 C:\Bloc\D6\dls.cpp [Error] no match for 'operator+=' in 'stri += MSTR(((char*)(& strj)))'