你能把一个函数放在c ++的另一个函数里面吗?

时间:2013-10-04 20:06:27

标签: c++ function

假设我有两个功能,一个呼叫另一个功能。

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

是因为功能尚未完全填写吗?

3 个答案:

答案 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)