0

2 つの関数があり、一方が他方を呼び出して機能するとします。

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_instancesome_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 に答える