假设我有两个功能,一个呼叫另一个功能。
void friendList::addFriend(string userNameIn)
{
if(friendList::isFriend(userNameIn))
//add friend
}
bool friendList::isFriend(string name)
{
//check if user name exists
}
这是允许的吗?我收到的错误是:
In member function 'void User::addFriend(std::string)':
and error: cannot call member function 'bool friendList::isFriend(std::string)' without object
是因为功能尚未完全填写吗?
答案 0 :(得分:3)
是的,函数当然可以在C ++中调用其他函数。
这样做不是将函数放在其他函数中的情况:您的问题标题具有误导性。
看起来好像addFriend
可能是静态成员函数,因此它没有对象,而isFriend
是非静态成员函数。当类的静态成员函数调用非静态成员函数时,它必须提供一个对象:
class someclass {
// ...
static void static_member();
void nonstatic_member();
};
void some_class::static_member()
{
nonstatic_member(); // error
some_instance.nonstatic_member(); // okay
}
void some_class::nonstatic_member()
{
}
static_member
无法调用nonstatic_member
,但可以在对象上调用nonstatic_member
。如果some_instance
被适当地定义为some_class
的实例,它将起作用。
答案 1 :(得分:1)
编译错误:
无法在没有对象
的情况下调用成员函数[...]
向我建议您尝试直接调用非static
成员函数 ,而不是通过对象。例如:
class Foo
{
public:
int DoIt() {}
};
int main()
{
Foo::DoIt();
}
如果这是你想要做的事情,你就做不到。需要通过对象调用非static
成员函数:
int main()
{
Foo foo;
foo.DoIt();
}
如果必须避免通过对象进行调用,那么您需要创建成员函数static
:
class Foo
{
public:
static int DoIt() {}
};
int main()
{
Foo::DoIt(); // OK
}
但是,DoIt
将无法调用其他非static
成员函数。
答案 2 :(得分:-1)
您想使用'this'指针。 this->isFriend(userNameIn)