вызов функции в классе - PullRequest
       2

вызов функции в классе

1 голос
/ 30 сентября 2011

Я хочу изменить «значение» при запуске моего приложения.но когда я вызываю RS232 :: PackageRecived в «RS232.cpp», я возвращаю эту ошибку:

Ошибка 1, ошибка C2352: «RS232 :: PackageRecived»: недопустимый вызов нестатического члена

////////////////////////////////////////////   RS232.cpp FILE

#include "RS232.h"
void RS232::PackageRecived()
{
value =123;
}
void TryCallPackageRecived()
{
RS232::PackageRecived(); // my compiler error is here
}
int RS232::Connect()
{
TryCallPackageRecived();
}
RS232::RS232(void)
{
}
RS232::~RS232(void)
{
}
////////////////////////////////////////////      RS232.h File
class RS232
{
public:
int value;
int Connect();
void PackageRecived();
RS232(void);
~RS232(void);
};
////////////////////////////////////////////    Main.cpp File
#include "RS232.h"
RS232 RS;
int main()
{
RS.Connect();
}

Ответы [ 3 ]

1 голос
/ 30 сентября 2011

Ваша функция «TryCallPackageRecived ()» не является членом класса RS232.Он пытается вызвать функцию-член RS232, которая не является статической.Это не разрешеноКогда вы хотите вызвать нестатическую функцию-член, вам нужно вызвать ее для определенного объекта.

В этом случае вы можете сделать:несколько объектов, вы можете изменить функцию TryCallPackageRecived, чтобы получить указатель на объект RS232:

void TryCallPackageRecived(RS232 *ptr)
{
   if(ptr != 0)
      ptr->PackageRecived(); 
}

... more code ...

int RS232::Connect()
{
    TryCallPackageRecived(this);
}
0 голосов
/ 30 сентября 2011

Очевидный способ исправить это - добавить TryCallPackageRecived() к вашему RS232 классу:

////////////////////////////////////////////      RS232.h File
class RS232
{
public:
    int value;
    int Connect();
    void PackageRecived();
    void TryCallPackageRecived();
    RS232();
    ~RS232();
};

////////////////////////////////////////////   RS232.cpp 

// [...]    
void RS232::TryCallPackageRecived()
{
    PackageRecived();
}
// [...]    
0 голосов
/ 30 сентября 2011

Это потому, что PackageRecived не является статическим методом, и вы не можете вызывать нестатические методы без объекта.

Либо сделайте его статическим методом (но это зависит от вашей логики), либо вызовите его напрямую, так как вы все равно находитесь в этом классе.

void TryCallPackageRecived()
{
    PackageRecived(); // my compiler error is here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...