0

2つのファイルにまたがるクラスがあります。これはdeclare.hファイルで宣言され、define.cppファイルで定義されます。

define.h

class A{
    public: int a;
            void func(){ a = some_other_func(); }
             A();
};

define.cpp

A::A(){
    a =0;
}

全体的な考え方は、インライン関数で使用する前に、コンストラクターで変数を初期化することです。ただし、コンストラクター定義と関数定義は異なるファイルにあります。これに問題はありますか?

4

3 に答える 3

0

コンストラクターを入力してから、として作成#include "declare.h"する必要があります。define.cppA::A() : a(0){}

于 2012-08-30T05:32:05.573 に答える
0

declare.hに含まれている場合、宣言/定義の分離にまったく問題はありませんdefine.cpp。ただし、通常は、実装ファイルの名前を宣言ファイルと同じにし、接尾辞を付けないようにします。したがって、あなたのケースはとである可能性がA.hありA.cppます。

ただし、メンバー変数a自体の初期化には問題があります。コンストラクター初期化リストで初期化 することをお勧めします。int a

A::A() : a(0) {}

あなたのコードでは、それはまったく初期化されていませんaコンストラクターの本体でローカル変数と呼ばれるローカル変数を作成して初期化します。おそらくそれはあなたが意図したものではありません。

于 2012-08-30T05:32:47.843 に答える
0

一般的に、これは技術的な問題ではありませんが。.hファイルはコードへのインターフェイスであるという規則を採用する必要があります。そのため、他のコードが自分のコードを呼び出すために必要なものだけが含まれている必要があります。

于 2012-08-30T05:33:13.310 に答える