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

时间:2011-02-10 09:05:57

标签: c++ class

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

  

警告C4832:令牌'。'是非法的   在UDT' A之后:见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;
}

3 个答案:

答案 0 :(得分:6)

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

E.g。

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

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

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

如果在getString()中声明static A,则可以在没有对象的情况下调用该函数,但语法使用::,而不是.。< / p>

E.g。

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

使用类似getStringFromA的函数名称,我希望传递一个我希望从中获取字符串的特定A的参数,可能通过引用传递A

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

如果getString中的A实际上没有修改A对象,最好声明函数const,以便可以在{{1}上调用它} const的实例。在这种情况下,可以使用A引用。

const

答案 1 :(得分:4)

getString()不是静态成员函数;您必须在A的特定实例上调用它,例如A a; a.getString();

答案 2 :(得分:2)

由于A::getString()不是静态方法,因此您需要在A实例上调用它。