为什么我不能这样做? 编译说
警告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;
}
答案 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
的实例上调用它。