C++ 如何访问静态函数中的其他类实例变量

C++ 如何访问静态函数中的其他类实例变量,c++,static,C++,Static,我真的需要访问“IsValid”函数中的“utilityls”。有没有一个简单的方法可以做到这一点?或者有没有其他方法或解决办法?对不起,如果这是一个愚蠢的问题。伙计们,请帮帮我…你们有一个静态函数。如何访问成员变量?要么使变量为静态函数,要么使函数为非静态函数。您得到了一个静态函数。如何访问成员变量?要么使变量为静态变量,要么使函数为非静态变量。如果不先创建类的实例,就无法访问实例变量。要么使IsValid非静态,要么向静态方法添加代码,如 甲级; a、 utilityCls.ProcessD

我真的需要访问“IsValid”函数中的“utilityls”。有没有一个简单的方法可以做到这一点?或者有没有其他方法或解决办法?对不起,如果这是一个愚蠢的问题。伙计们,请帮帮我…

你们有一个静态函数。如何访问成员变量?要么使变量为静态函数,要么使函数为非静态函数。

您得到了一个静态函数。如何访问成员变量?要么使变量为静态变量,要么使函数为非静态变量。

如果不先创建类的实例,就无法访问实例变量。要么使IsValid非静态,要么向静态方法添加代码,如

甲级; a、 utilityCls.ProcessData()

如果不先创建类的实例,就无法访问实例变量。要么使IsValid非静态,要么向静态方法添加代码,如

甲级;
a、 utilityCls.ProcessData()

静态成员函数与类相关,而不是与该类的任何实例相关。它很像一个被声明为类之友的全局函数(有一种奇怪的名称,包括前面加上的类名)


一句话:要访问(非静态)数据,您需要指定一个类的实例,该类的数据将与该类一起使用(就像使用友元函数一样)。

静态成员函数与该类相关,而不是与该类的任何实例相关。它很像一个被声明为类之友的全局函数(有一种奇怪的名称,包括前面加上的类名)


一句话:要访问(非静态)数据,您需要指定一个类的实例,该类的数据将与该类一起使用(就像您使用友元函数一样)。

而不是将
IsValid
设为全局函数(您在这里无意中这样做了)或成员函数(我确信这是您的真实意图),将其设为,并在函子的构造函数中传递要使用的实例

像这样:

//ClassA.h
Class ClassA
{
    private:

    UtilityClass utilityCls; // this is the instance that I need to access

    virtual void Read();
    static bool IsValid(char c);

}

//ClassA.cpp
void ClassA::Read()
{
    ....
    string str = "abcdefg"; // sample only
    if(find_if(str.begin(), str.end(), IsValid) == str.end())
    {
        ....
    }
}

inline bool IsValid(char c)
{
    // There are compile errors When I call functions of Utility class here
    // Ex: utilityCls.ProcessData();

    return (isalpha(c)); // sample only
}

不要将
IsValid
设置为全局函数(您在这里意外地执行了此操作)或成员函数(我确信这是您的真实意图),而是将其设置为,并在functor的构造函数中传递您要使用的实例

像这样:

//ClassA.h
Class ClassA
{
    private:

    UtilityClass utilityCls; // this is the instance that I need to access

    virtual void Read();
    static bool IsValid(char c);

}

//ClassA.cpp
void ClassA::Read()
{
    ....
    string str = "abcdefg"; // sample only
    if(find_if(str.begin(), str.end(), IsValid) == str.end())
    {
        ....
    }
}

inline bool IsValid(char c)
{
    // There are compile errors When I call functions of Utility class here
    // Ex: utilityCls.ProcessData();

    return (isalpha(c)); // sample only
}

类的静态函数实际上是元函数:这些函数对整个类有用,但对类的任何特定对象都不有用。因此,它们无法访问特定对象的成员,尤其是缺少大多数成员函数包含的隐含
这个
指针

如果需要静态类来访问对象的成员,则必须显式地传递指向该对象的指针或引用。通常最好使函数非静态


另外,您对IsValid的定义不正确,它应该是
内联bool ClassA::IsValid(char c)

类的静态函数实际上是元函数:这些函数对整个类有用,但对类的任何特定对象都没有用。因此,它们无法访问特定对象的成员,尤其是缺少大多数成员函数包含的隐含
这个
指针

如果需要静态类来访问对象的成员,则必须显式地传递指向该对象的指针或引用。通常最好使函数非静态

另外,您对IsValid的定义不正确,应该是
内联bool ClassA::IsValid(char c)

请发布真实代码。这甚至不会编译请发布真实代码。这甚至不会编译
void ClassA::Read()
{
    ....
    string str = "abcdefg"; // sample only
    if(find_if(str.begin(), str.end(), IsValid(utilityCls)) == str.end())
    {
        ....
    }
}