0

2 つのクラスを定義し、そのうちの 1 つでフレンド関数を宣言し、もう 1 つで実装しようとしています。私は実際に、この投稿で見つかったものを正確に取得しようとしています:

特定の1つの関数とクラスに対してのみフレンド関数を宣言するにはどうすればよいですか?

回答を読んで、なるほどと思いました。それを私のコードに実装すると、エラーが発生しました:

編集:

エラー1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup ...\MSVCRTD.lib(crtexe.obj) - (main関数追加で解決)

エラー2 error LNK1120: 1 unresolved externals ...\Debug\Project.exe 1 1.. - (main関数追加で解決)

エラー 3 IntelliSense: メンバー "one::data1" (19 行目で宣言) にアクセスできません ...\Friends.cpp - (プロジェクトをクリーニングして再構築した後でも存在します)

実装方法に問題があるのではないかと思ったので、回答のコードをコピーして貼り付けました。

class one;

class two
{
 private:
    int data2;
 public:
    two()
    {
       data2 = 200;
    }
    // this goes fine, because the function is not yet defined. 
    int accessboth(one a);
};

class one
{
private:
    int data1;
public:
    one()
    {
       data1 = 100;
    }
    friend int two::accessboth(one a);
};

// don't forget "inline" if the definition is in a header. 
inline int two::accessboth(one a)
{
    return (a.data1 + (*this).data2);
}

しかし、同じ場所で同じエラーが発生しました: a.data1アクセスできませんでした

次に、問題を解決するための同じ手法を提案する例をさらに検索して見つけましたが、それらはすべて、同じ場所で同じアクセスできないエラーを与えてくれました...

足りないものはありますか?提供された例 (以前の投稿からの提案された解決策) は機能するはずですか? 仕様が変わったのかな。

助けてくれてありがとう。D

PS これについて新しい質問を開かないように、以前の投稿にコメントしようとしましたが、評判が低いためコメントできませんでした (私はここで初めてです)。

4

1 に答える 1

0

メイン関数がありません。たとえば、次のようにします。

int main() {
  one a;
  two b;
  b.accessboth(a);
}

ファイルの一番下に置くと、コンパイルされます。

于 2014-01-18T10:15:20.557 に答える