Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > проблемы с CFormView и CListBox


Автор: Найли 1.6.2005, 18:54
Проблема заключается в следующем:
Я сделала для моего вида базовым CFormView,далее в реадкторе ресурсов запихала туда CListBox, потом в ClassWizard'e создала переменную для моего класса вида CListBox Control
Вот отрывок из кода с объявлением класса, переменной и необходимой мне функции

Код

class CCharView : public CFormView
{
protected: // create from serialization only
    CCharView();
    DECLARE_DYNCREATE(CCharView)

public:
    //{{AFX_DATA(CCharView)
    enum { IDD = IDD_RGR_FORM };
    CListBox    m_List;
    //}}AFX_DATA

// Attributes
public:
    CCharDoc* GetDocument();
    static void Addstr(char *s);
// Operations

Вот сама функция
Код

void CCharView::Addstr(char *s)
{
    m_List.AddString(s);
}

а проблема в том, что выдается ошибка error C2228: left of '.AddString' must have class/struct/union type
Я не понимаю почему VC не видит мою переменную...
Была бы очень признательна быстрой помощи.... так как сроки пожимают, а без этого я не могу продолжить... =((

Автор: kometa_triatlon 1.6.2005, 20:39
Так же ничего не видно... Покажи весь код, а лучше выложи проект. Может там просто инклуда нужного нет, хоть это и вряд ли.

Автор: Амортизатор 1.6.2005, 21:11
Судя по всему, просто отсутствует инклюд файла с классом CCharView. Где реализована эта функция? Если не в файле CCharView.cpp (или как он у вас там называется), возможно в самом деле нет инклюда.

Автор: kometa_triatlon 1.6.2005, 21:40
Амортизатор
Судя по коду, программа создавалась визардом. Если это так, то вряд ли нет инклуда, разве что удалила по ошибке...

Автор: Dov 2.6.2005, 00:04
убери static в объявлении ф-ции.

Автор: Найли 2.6.2005, 07:58
Если убрать статик, то пишет, что не законный вызов нестатической функции члена.
Все инклуды на месте. =(

Автор: Lion 2.6.2005, 09:28
Цитата
Код

class CCharView : public CFormView
{
....
    static void Addstr(char *s);
....

а проблема в том, что выдается ошибка error C2228: left of '.AddString' must have class/struct/union type
Я не понимаю почему VC не видит  мою переменную...

Правильно не видит. Соб-но цитата:

“Статические функции – члены класса не получают указатель this, соответственно эти функции не могут обращаться с нестатическим членам класса.”
Б.И. Березин, С.Б. Березин, “Начальный курс С и С++”.


Функцию объявить просто как void. И если уж вы все равно используете MFC, почему бы вам не использовать CString. Будет удобнее.

На счет второй ошибки, внимательно посмотреть где и как вы вызываете вашу функцию.

Автор: Найли 2.6.2005, 13:14
вообще убрала эту функцию....
у меня есть глобальная функция...она пишется в документе CharView.cpp
Код


void my_print(int num, char * s)
{
    m_List.AddString(s);
}

Использую именно char*, так как это было необходмо в старой курсвой работе..а счас мне надо просто напистаь под нее виндоус приложение... это не сложно, загвоздка у меня тока в том, что не могу добавить строку в листбокс в "виде". =(

Автор: Lion 2.6.2005, 14:09
Цитата
вообще убрала эту функцию....
у меня есть глобальная функция...она пишется в документе CharView.cpp
Код


void my_print(int num, char * s)
{
    m_List.AddString(s);
}

Использую именно char*, так как это было необходмо в старой курсвой работе..а счас мне надо просто напистаь под нее виндоус приложение... это не сложно, загвоздка у меня тока в том, что не могу добавить строку в листбокс в "виде". =(

Уважаемая, не надо крайностей. smile Не надо глобальных функций.

Вам надо на форме отобразить список, правильно? ОК. Добавьте в класс формы функцию типа void, для добавления строки. Вам в общем надо было просто убрать static. Далее надо посмотреть, где и как вы пытаетесь ее вызывать. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)