1

私はc ++を初めて使用します。次のコードをVisual Studio C ++で実行します

    struct bob
    {
       double a,b;      
       bob(double a,double b);
    }

    int main()
    {
        bob z(2.2,5.6);
        cout<<z.a<<endl;
        keep_window_open();
        return 0;
    }     

このコードを実行すると、次のエラーが発生します。

エラー 1 エラー LNK2019: 未解決の外部シンボル "public: __thiscall bob::bob(double,double)" (??0bob@@QAE@NN@Z) 関数 _main C:\drives\Comp-Mech\programming\VS で参照\C++\projects\E1\E1.obj E1

4

3 に答える 3

5

クラス bob のコンストラクターを実装する必要があります。

 bob::bob(double a,double b) : a(a), b(b) {}
于 2013-05-01T12:34:50.770 に答える
3

のコンストラクターの宣言をbob指定しましたが、定義を指定していません。定義は、コンストラクターの実装を提供し、それが何をすべきかを正確に示します。この場合、コンストラクターでその引数をオブジェクトのメンバー変数に割り当てる必要がある可能性があります。

bob::bob(double a, double b)
{
  this->a = a;
  this->b = b;
}

上記のコードで割り当てを使用したのは、あなたが慣れている可能性が高いためです。ただし、メンバーを直接初期化できるメンバー初期化リストに注意する必要があります。

bob::bob(double a, double b)
  : a(a), b(b)
{ }

これは、引数でメンバーを初期化aし、引数でメンバーを初期化することを示しています。また、メンバーに割り当てる前に、コストがかかる可能性のあるメンバーのデフォルトの初期化を回避します。abb

于 2013-05-01T12:35:57.157 に答える
1

のコードを書いていないからですbob::bob(double, double)

struct bob
{
   double a,b;      
   bob(double aa, double bb) a(aa), b(bb) {}
};
于 2013-05-01T12:35:31.053 に答える