为什么我不能这样做(错误C2275:'A':非法使用此类型作为表达式)

Vex*_*toR 1 c++ class

为什么我不能这样做?编译说

警告C4832:令牌'.' 在UDT之后是非法的'A:看到'A'的声明错误C2275:'A':非法使用此类型作为表达式:参见'A'的声明

class A{
public:
    std::string getString(){return "olalal";}
};

class B{
public:
    std::string getStringFromA() {return A.getString();}
};


int main()
{
    B b;
    cout << b.getStringFromA();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 6

您只能static在对象上调用非成员函数.

例如

std::string B::getStringFromA()
{
    A object_of_type_A;
    return object_of_type_A.getString();
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建一个未命名的临时用户A并调用getString()它,例如

class B {
public:
    std::string getStringFromA() { return A().getString(); }
};
Run Code Online (Sandbox Code Playgroud)

如果getString()声明staticA,你可以在没有对象的情况下调用函数,但语法使用的::不是..

例如

std::string B::getStringFromA()
{
    return A::getString();
}
Run Code Online (Sandbox Code Playgroud)

getStringFromA但是,使用函数名称,我希望传递一个A我希望从中获取字符串的特定参数,也许传递A引用.

class B {
public:
    std::string getStringFromA(A& a) { return a.getString(); }
};
Run Code Online (Sandbox Code Playgroud)

如果getStringin A实际上没有修改A对象,那么最好声明该函数,const以便可以在const实例上调用它A.在这种情况下,const可以使用参考.

class A {
public:
    std::string getString() const { return "olalal"; }
};

class B {
public:
    std::string getStringFromA(const A& a) { return a.getString(); }
};
Run Code Online (Sandbox Code Playgroud)