Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Работа с класами


Автор: NOCaut 22.7.2011, 14:24
у меня есть клас CBand и вункция вне класа runThread. Как визвать в етой функцию функцию класа?

void runThread(LPVOID args)
{
  CBandToolBarCtrl::Navigate(L""); // - >регаеться что недопустимый вызов нестатической функции-члена
}

Автор: newbieone 22.7.2011, 14:33
может, так?
Код

void runThread(LPVOID args, CBand &object)
{
  object.navigate(arguments)
}

в общем, нестатические функции-члены должны вызываться по отношению к какому-то объекту. на то они и нестатические.

Автор: JЕT 22.7.2011, 14:39
Либо сделайте эту функци статической, либо обьявите объек тласса CBand.

Пример 1:

Код

#include <iostream>

class MyClass {
public:
    void foo() const
    {
        std::cout << "MyClass::foo()\n";
    }
};

void my_function() 
{
    MyClass object;
    object.foo();
}

int main()
{
    my_function();

    return 0;
}


Пример 2:

Код

#include <iostream>

class MyClass {
public:
    static void foo()
    {
        std::cout << "MyClass::foo()\n";
    }
};

void my_function() 
{
    MyClass::foo();
}

int main()
{
    my_function();

    return 0;
}


Автор: NOCaut 22.7.2011, 14:39
после создание object нужно чистить память за соболй?

Добавлено через 3 минуты и 13 секунд
У меня public секция что за ерор?

error: спецификатор 'static' не должен использоваться для функций-членов с областью видимости в пределах файла

Автор: bsa 22.7.2011, 14:54
NOCaut, код покажи

Автор: NOCaut 22.7.2011, 15:00
// h file
class CBandToolBarCtrl : public CWindowImpl<CBandToolBarCtrl, CToolBarCtrl>
{
public:
static  void Navigate(CString url);

.....

// cpp file
static void CBandToolBarCtrl::Navigate(CString url) 
{

}


Автор: JЕT 22.7.2011, 15:03
Уберите клчевое слово static из реализации функции.

Добавлено через 36 секунд
То есть сделайте просто

Код

void CBandToolBarCtrl::Navigate(CString url) 
{

}

Автор: NOCaut 22.7.2011, 15:03
нащол что не так Но тепер с етой функции я не вижу переменние класа

Автор: JЕT 22.7.2011, 15:07
Цитата

Но тепер с етой функции я не вижу переменние класа


Скорее всего переменные в классе обьявлены со специикатором доступа private.
Создайте get и set функции для доступа к этим переменным.

Автор: NOCaut 22.7.2011, 15:10
Рахобрался

Автор: bsa 22.7.2011, 17:18
Цитата(JЕT @  22.7.2011,  15:07 Найти цитируемый пост)
Скорее всего переменные в классе обьявлены со специикатором доступа private.

вообще-то, статические методы класса НЕ ИМЕЮТ прямого доступа к НЕ СТАТИЧЕСКИМ членам класса без указания объекта.

Автор: JЕT 22.7.2011, 18:26
Да, вы правы. Перепутал немного.

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