0

假设我有两个功能,一个调用另一个工作。

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

是因为功能还没有完全填写吗?

4

3 回答 3

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.

于 2013-10-04T20:15:26.493 回答
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成员函数。

于 2013-10-04T20:17:38.460 回答
-1

您想使用“this”指针。 this->isFriend(userNameIn)

于 2013-10-04T20:09:43.997 回答