Ошибка в возвращаемом значении
*******************************************************************************
файл MyDoc.h
private
CStringArray a_fileName; // массив имен найденных в текущей папке файлов
public
CStringArray GetFileArray(); // возвращает массив имен файлов
*********************************************
файл MyDoc.cpp
CStringArray CMyDocGetFileArray()
{
CFileFind file;
TCHAR sz[10], szFileName[MAX_PATH];
lstrcpy(szFileName,_T("C\\Мои документы\\"));
lstrcpy(sz, _T("*.bmp"));
lstrcat(szFileName, sz);
CString string;
BOOL bfile = file.FindFile(szFileName);
if ( bfile )
{
while ( bfile )
{
bfile = file.FindNextFile();
string = file.GetFileTitle();
a_fileName.Add(string);
}
}
return a_fileName;
}
*********************************************
При компиляции выдается сообщение об ошибке на последнюю строку "return a_fileName;" "error C2558 class 'CStringArray' no copy constructor available". Но почему?
Заранее благодарю за разъяснение
В классе CStringArray (насколько я понимаю) нет оператора "=", соответственно конструкции типа CStringArray Ar1,Ar2; Ar1=Ar2 недопустимы. Можешь, если хочешь забацать класс производный от CStringArray и в нём определить оператор "=". Удачи!
Или все дело в том, что я передаю этот объект по значению, а в этом случае как раз и выполняется копирование?
И еще: как именно перегрузить оператор "=" (что этот оператор должен делать)?
Спасибо!
CStringArray::MyStringArray operator=(CStringArray Arr){
for(int i=0;i<Array.GetSize();i++)Add(Array.GetAt(i));
}
хотя перегрузкой операторов не баловался никогда, посему в синтаксисе могу и ошибаться, и если кто поправит только спасибо скажу...
CStringArray MyStringArrayoperator=(CStringArray Arr){
SetSize(0);
for(int i=0;i<Arr.GetSize();i++)Add(Arr.GetAt(i));
}
[ Это Сообщение было отредактировано keisik в 2001-12-03 1826 ]
Цитата:
On 2001-12-03 1457, keisik wrote
Или все дело в том, что я передаю этот объект по значению, а в этом случае как раз и выполняется копирование?
А как насчет этого предположения? Я прав или нет?
Может я чего не так понимаю. но передача по значению имеет смысл лишь при передаче функции каких-либо параметров. А у тебя же вообще ничего не передаётся. У тебя есть массив, объявленный глобально, т.е. тебе и значения никакого возвращать не надо, сделай в начале функции обнуление массива (Array.SetSize(0)) - я про это тоже забыл, и переделай функцию в void, и забудь про конструкторы копирования и остальной геморрой
Да нет, функцию я создаю в классе документа, а вызывать ее буду из класса представления. Массив я объявляю как protected.
напиши, как ты её вызываешь.
*********************************************
файл MyDoc.h
...
public
CStringArray * GetFileArray(); // возвращает массив имен файлов
...
*********************************************
Файл MyDoc.cpp
CStringArray * CMyDocGetFileArray() // создание массива имен файлов из текущей папки
{
CFileFind file;
TCHAR sz[10], szFileName[MAX_PATH];
lstrcpy(szFileName,_T("C\\Мои документы\\"));
lstrcpy(sz, _T("*.bmp"));
lstrcat(szFileName, sz);
CString string;
BOOL bfile = file.FindFile(szFileName);
if ( bfile )
{
while ( bfile )
{
bfile = file.FindNextFile();
string = file.GetFileTitle();
a_fileName.Add(string);
}
}
return &a_fileName;
}
*********************************************
Вызов функции - файл MyView.cpp
void CMyViewCreateImage(CDC* pDC) // Вывод на экран картинки BMP
{
CMathematicsDoc* pDoc = GetDocument();
...
// Создание массива имен BMP файлов из текущей папки
CStringArray * a_fileName = pDoc->GetFileArray();
...
}
Такие вот дела...
Но по-любому спасибо!
Цитата:
On 2001-12-05 1141, Anonymous wrote
Вообще-то эту проблему я уже решил, вернув массив по ссылке
*********************************************
файл MyDoc.h
...
public
CStringArray * GetFileArray(); // возвращает массив имен файлов
...
*********************************************
Файл MyDoc.cpp
CStringArray * CMyDocGetFileArray() // создание массива имен файлов из текущей папки
{
CFileFind file;
TCHAR sz[10], szFileName[MAX_PATH];
lstrcpy(szFileName,_T("C\Мои документы\"));
lstrcpy(sz, _T("*.bmp"));
lstrcat(szFileName, sz);
CString string;
BOOL bfile = file.FindFile(szFileName);
if ( bfile )
{
while ( bfile )
{
bfile = file.FindNextFile();
string = file.GetFileTitle();
a_fileName.Add(string);
}
}
return &a_fileName;
}
*********************************************
Вызов функции - файл MyView.cpp
void CMyViewCreateImage(CDC* pDC) // Вывод на экран картинки BMP
{
CMathematicsDoc* pDoc = GetDocument();
...
// Создание массива имен BMP файлов из текущей папки
CStringArray * a_fileName = pDoc->GetFileArray();
...
}
Такие вот дела...
Но по-любому спасибо!
Спасибо, keisik!